Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

утечка памяти

5.8K
20 декабря 2006 года
ivan1985
42 / / 29.06.2005
прога работает с бд. После операции каждый раз размер проги в памяти увеличивается почти на мег. что это может быть?(вроде сборщик мусора должен все объекты уничтожать) И как с этим бороться?
24K
20 декабря 2006 года
mik-a-el
2 / / 19.12.2006
Что эта прога делает с БД? Данные запрашивает или что? Опишите подробнее.
5
20 декабря 2006 года
hardcase
4.5K / / 09.08.2005
проверь, закрываешь, ли ты sql-соединение, освобождаешь ли ресурсы, может у тебя транзакции не закрыты.....
хорошая практика использвать using() {} конструкцию.
713
20 декабря 2006 года
Ap0k
360 / / 13.03.2006
Беспредметный разговор. Код в студию.
5.8K
20 декабря 2006 года
ivan1985
42 / / 29.06.2005
прога читает таблицы из одной бд, где нужно модифицирует и записывает в другую БД

код слишком длинный: "Вы ввели слишком длинный текст (20581 символов). Пожалуйста, сократите его до 10000 символов."

Соединения аккуратно закрываю, можно по-подробнее про "освобождаешь ли ресурсы, может у тебя транзакции не закрыты....." - я думал сборщик мусора уничтожает весь "мусор"
24K
22 декабря 2006 года
mik-a-el
2 / / 19.12.2006
"Вы ввели слишком длинный текст (20581 символов). Пожалуйста, сократите его до 10000 символов." - это эксепшен или что? Вылезает при сохранении в базу? Тогда проверяй соответствие сохраняемых данных разрядности полей базы.
5.8K
22 декабря 2006 года
ivan1985
42 / / 29.06.2005
это я про то, что текст моей проги слишком длинный, чтобы его выкладывать.
23K
23 декабря 2006 года
Pink Demon
3 / / 22.12.2006
.NET использует generational GC. Это значит, что если ты выделяешь слижком много памяти, то она будет помечена как "большой блок" и сборщик мусора будет смотреть на нее лишь по большим праздникам. И даже если объекты маленькие, но ссылки на них висят подолгу без дела, то их могут продвинуть в поколение 2, а это лишь немногим лучше случая выше. Я советую попробовать запускать сборку мусора вручную. Если поможет, то нужен рефакторинг. Если нет, то причина в чем-то другом.
273
27 декабря 2006 года
3A3-968M
1.2K / / 22.12.2005
Цитата: Pink Demon
.NET использует generational GC. Это значит, что если ты выделяешь слижком много памяти, то она будет помечена как "большой блок" и сборщик мусора будет смотреть на нее лишь по большим праздникам. И даже если объекты маленькие, но ссылки на них висят подолгу без дела, то их могут продвинуть в поколение 2, а это лишь немногим лучше случая выше. Я советую попробовать запускать сборку мусора вручную. Если поможет, то нужен рефакторинг. Если нет, то причина в чем-то другом.


Неправильно, сборщик мусора лишь уничтожает управляемые объекты. А уничтожением неуправляемых данных, таких как соединения с БД, файловые потоки, unmanaged-буфферы, транзакции, должен заниматься сам программист (об этом чёрным по белому записано в CLI Specification, стандарт ECMA 335, часть 1 - Арихитектура). Такие вещи освобождаются системой, только если приложение завершило работу. Во время работы проги даже если GC зарезал экземпляр SqlConnection, то это совершенно не означает, что соединение разрушено. Конечно, нужно использовать using или вызывать Dispose для таких объектов обязательно. Ещё очень эффективно использовать при тестировании своего приложения хороший профайлер и отладчик, тогда удасться найти участки кода, которые вызывают утечку памяти. И ещё, напоследок, попробуй периодически вызывать GC.Collect(). Может поможет.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог