![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
bytex2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.5.2006 Репутация: нет Всего: нет |
Всем привет,
Написал многопоточную парсилку HTML страниц. При запуске, размер памяти занимаемой программой растет очень быстро, несмотря на то что я ничего специально в памяти не храню. С чем это может быть связанно ? Глядя на график память/время, видно что память иногда освобождается, но тут же занимается еще больше, ну и своп растет сильно. Иногда прога начинает занимать до 600Мб в памяти, и еще не меньше в Swap. Как это лечится ? ![]() |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Фигасе...
А вообще мы тут не телепаты ![]() Скорее всего что-то не так в самой программе. Например, ты случаем разных нехороших операций с большими (> 1000 символов) строками не делаешь? Для начала же попробуй через некоторые промежутки времени вызывать GC.Collect(); -- вдруг поможет ![]() -------------------- Да. Именно так. |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Если делаешь много операций со строками, используй класс StringBuilder.
|
|||
|
||||
bytex2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.5.2006 Репутация: нет Всего: нет |
Дрон,
Извиняюсь за невнятный вопрос ![]() попробовать реализовать его на C# так как в C# есть автоматическая сборка мусора. Как часто надо использовать GC.Collect() ? Ниже привожу основную часть своей программы, от которой зависит прирост памяти. Замечено что при меньших объемах скачиваемой информации, рост памяти происходит медленнее. Не мог бы ты подсказать что тут можно оптимизировать ? Заранее спасибо ![]()
Добавлено @ 15:53 Exception, В том то все и дело что я не делаю массовых операций со строками. Все что я делаю, это скачиваю страницу, анализирую ее на предмет присутствия там своих меток, кладу урл в ArrayList и скачиваю новую страницу. Это сообщение отредактировал(а) bytex2 - 26.5.2006, 15:55 |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Модератор: используйте кнопку "Код"!
|
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Не слишком часто. Более конкретных рекомендаций нет. Надо самому экспериментировать. Есть предположение, что mshtml.HTMLDocument(); съедает много памяти. Но я с ним не работал -- ничего сказать не могу. Для начала проверь, есть ли у него метод Dispose() и если есть то вызывай его, когда он тебе становится не нужен. Кстати, то же самое и для других объектов (Req, Reader и т.д.). Это сообщение отредактировал(а) Дрон - 26.5.2006, 16:21 -------------------- Да. Именно так. |
|||
|
||||
bytex2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.5.2006 Репутация: нет Всего: нет |
Дрон,
А может помочь если в конце String Body = null делать ? |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Нет. Она и так при выходе из метода за пределы видимости уходит. -------------------- Да. Именно так. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Вместо вызова Dispose() лучше поьзоваться конструкцией using
Она сама, по ее завершению, уничтожит объект Doc1, вызвав его метод finalize(). Аналогично с остальными ![]() P.S. По поводу GC (Garbige Collector) он работает с особенностями: все объекты пережившие две! (по умолчанию) сборки мусора не удалятся никогда ![]() Можно вручную изменить этот параметр: GC.MaxGeneration Плюс к этому если у класса есть деструктор, то при первой сборке мусора он вызывается, но объект уничтожается только после следующей сборки. Почти 100% кандидат в "бессмертные" ![]() P.P.S. Где то здесь Void постил ссылку на инфу по этому поводу. ИМХО в теме "Мои ламерские вопросы по C#" тов. Сарт-а ![]() P.P.P.S А где ты это делаешь? В или Больше я подозрительных строчек не нашел ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |