@NoEscape

Как наиболее эффективно выкачать несколько миллионов html страниц, при этом не потратив вечность?

Программа на C# делает Get запросы и выкачивает код. Я создаю в цикле по новому потоку, каждый поток с функцией выкачивания html. После 1400 повторов цикла прога виснет, visual studio тоже. Иногда отвисает и выбрасывает ошибку out of memory. Кажется, это из за большого количества потоков.

Вопрос: как мне наиболее эффективно выкачать несколько миллионов html страниц, при этом не потратив вечность?
  • Вопрос задан
  • 2843 просмотра
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
У вас что 1400 потоков создается? Если у вас оперативки гигов 8-16 то конечно не хватит памяти... Вы хоть память освобождаете?

Вам нужно написать менеджер очереди. Несколько потоков будут висеть постоянно и каждый будет обращаться за новым заданием к менеджеру (придется блокировать остальные потоки дабы небыло гонки за ресурсами). Получив задание ваш поток-воркер выкачает данные и сохранит результат работы в базу/файловую систему и будет просить новое задание...
Ответ написан
nekipelov
@nekipelov
Я не программирую на C#, поэтому могу сказать только по подходу к задаче. На каждую страницу по потоку - расточительство. Тем более, что на каждом углу говорят о том, как удобно сделана асинхронность в C#. Т.е. потоки не нужны вообще, скачивать надо асинхронно и единственный поток вполне справится со скачиванием данных на достаточно широком канале.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы