Здравствуйте, Nikola78, Вы писали:
N>Есть windows сервис. Используется для обновления списка своих товаров на торговой площадке: он следит за файлом с помощью FileSystemWatcher и как только тот пояляется, он его читает и отправляет запросы в API интерфейс на сервер.
N>Я сделал его многопоточным, установил кол-во потоков равным 15. Не знаю почему именно столько и не знаю, много ли это или мало. Однако он работает.
Потоки хороши, когда они могут распараллелить задачу, не мешая друг другу.
В данном случае смысла в большом количестве потоков нет. Сеть-то все равно одна и потоки
будут "толпиться в дверях", мешая друг другу в ожидании своей очереди.
Можете сделать хоть сто потоков — отправка не будет быстрее.
Вот если на компьютере несколько сетевых интерфейсов, тогда да, можно попробовать через
каждый интерфейс пускать разные порции данных. Тогда, может, и будет смысл.
N>Вот метод отправки данных на сервер.
N>Идея такова: N> — если записей в файле меньше, чем кол-во потоков, то проходится по каждой записи и создаем один поток и отправляем данные. N> — если записей в файле больше, чем кол-во потовов, то отправляем данные порциями по 15 (кол-во потоков).
N>...
И что, на каждую запись приходится создавать отдельный HTTP-запрос ? Так это ведь ужасно,
учитывая их малый объем. По TCP-трафику получится многократный оверхед.
N>Как мне кажется, тут довольная низкая производительность: сначала он ест 2Кб. Если добавить файл в директорию, то он начинает есть 50Кб. N>К тому же, файл с 20 записями весит около 0,5Кб. Если будет весить около 1Мб, то в нем будет много тысяч записей. Их все их нужно будет отправлять порциями по 15 шт.
Мегабайтовый файл можно отправить на сервер в одном потоке за несколько секунд. Подумайте об этом.