Я работаю над приложением, которое требует, чтобы один тип сообщения попадал в базу данных, а другой тип сообщения - на внешний XML-файл.
Мне нужно обработать LOT... одна из больших проблем заключается в том, чтобы класс HttpWebRequest работал хорошо.Сначала я просто использовал стандартные синхронные методы и все эти потоки.Это было нехорошо.
Так что после небольшого чтения я увидел, что рекомендуемый способ сделать это - использовать методы Begin / End для делегирования работы портам завершения ввода-вывода, таким образом освобождая пул потоков и получаялучшая производительность.Похоже, что это не так ... производительность немного выше, но я, конечно, не могу видеть, чтобы использовались порты завершения ввода-вывода по сравнению с пулом потоков.
У меня есть поток, который вращается иотправляет мне доступные рабочие потоки + порты завершения в пуле потоков.Количество портов завершения всегда очень низкое (максимум, что я видел, используется 9), и я всегда использую около 120 рабочих потоков (иногда больше).Я использую шаблон начала / конца для всех методов в httpwebrequest
:
Begin/EndGetRequestStream
Begin/EndWrite (Stream)
Begin/EndGetResponse
Begin/EndRead (Stream)
Я правильно делаю?Я что-то пропустил?Я могу использовать (иногда) до 2048 http-соединений одновременно (из вывода netstat) - почему номера портов завершения должны быть такими низкими?
Если кто-нибудь может дать несколько серьезных советов о том, как преуспеть с этим управляющим работникомпотоки, порты завершения и httpwebrequest
было бы очень признательно!
РЕДАКТИРОВАТЬ: .NET является разумным инструментом для этого?Могу ли я получить большое количество http-соединений, работающих с .NET и стеком System.Net?Было предложено использовать что-то вроде WinHttp (или другой библиотеки C ++) и вызывать его из .NET, но я не хочу этого делать!