|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.12.2015, 15:00 | #1 |
Регистрация: 31.12.2011
Сообщений: 5
|
Переполнение/утечка памяти программы - C#
Пишу программу для парсинга одного сайта. Сам сайт парсится с помощью CsQuery. Нужно за раз обработать нужный диапазон страниц сайта. Задаётся начальная и конечная ссылки для парсинга и программа в несколько потоков перебирает все страницы в диапазоне и извлекает нужную информацию в List, что бы после окончания сохранить всё в файл. Нужное количество потоков запускается, и они по очереди берут из счётчика текущей страницы свой номер и работают с ним. В потоках написан цикл While, что бы они не закрывались, пока не спарсили последнюю страницу. После окончания парсинга отдельно сохраняется вся информация в List. Но проблема в том, что парсится будут большие диапазоны страниц больше миллиона, а при тестовом запуске на диапазоне в 10 000 страниц программа начинает занимать в памяти больше 1,5 гигабайт. В отдельной программе пробовал заполнять List случайными данными, по типу тех, что должны были быть извлечены. Добавил 100 000 строк, и размер оперативной памяти, используемой программы не превышал 100 мегабайт. Парсинг так же работает правильно, никаких избыточных данных он не добавляет. Я грешу на мою неправильную работу с потоками, и то, что сборщик мусора не уничтожает данные с прошлых проходов парсинга. Пробовал разные способы так и не решил проблему с утечкой памяти. Помогите найти ошибку, или подсказать более правильный метод работы с потоками. Код прикладываю.
Код:
|
22.12.2015, 15:48 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
забавно что вы не ждете окончания ваших потоков.
у вас часом list_posts не огромный вырастает? хранить то все в памяти. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
22.12.2015, 15:59 | #3 | ||
Регистрация: 31.12.2011
Сообщений: 5
|
Цитата:
Цитата:
|
||
22.12.2015, 16:38 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Код:
Код:
возможно ли ваш CQ переиспользовать? скорее всего дело в том что в рабочем процессе сборка мусора происходит реже. поидее она должна не допустить краша. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
22.12.2015, 17:01 | #5 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
1) Сколько всего оперативной памяти на машине, на которой запускается программа?
2) Мешает ли потребление памяти корректной работе? (Программа падает?)
Благодарить в репутацию. Проклинать — туда же
|
22.12.2015, 17:06 | #6 | |
Регистрация: 31.12.2011
Сообщений: 5
|
Цитата:
|
|
22.12.2015, 17:08 | #7 | ||
Регистрация: 31.12.2011
Сообщений: 5
|
Цитата:
Цитата:
|
||
22.12.2015, 17:11 | #8 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
посмотрите дальше, будет ли повышение или падение проги. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
22.12.2015, 17:13 | #9 | |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Цитата:
Переписали бы вы это на Task Parallel Library (TPL), а то сердце кровью обливается от нерационального создания потоков. Ну и на производительности оно серьезно сказывается
Благодарить в репутацию. Проклинать — туда же
|
|
22.12.2015, 17:17 | #10 | |
Регистрация: 31.12.2011
Сообщений: 5
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Утечка памяти | Vlad2891 | Общие вопросы Delphi | 11 | 27.02.2015 16:06 |
утечка памяти | Кудаив | Помощь студентам | 1 | 30.04.2012 18:18 |
Утечка памяти | Juffin | Общие вопросы Delphi | 3 | 02.11.2010 12:11 |
Утечка памяти | ZvEr_HaCkEr | Свободное общение | 13 | 24.09.2010 19:30 |
утечка памяти в С++ | vengo | Общие вопросы C/C++ | 9 | 10.06.2008 21:24 |