Память в .NET
От: master1  
Дата: 12.01.05 10:23
Оценка:
Как высвободить память занимаемую функцией new при захвате > 85000 байт?
GC.Commit() не помогает....

Например: Мы открывает окно с контролами (мапять выделяется), закрываем его (только часть памяти освобождается)
открываем еще раз — еще кусок памяти система забирает. и так далее.
В конце рабочего дня прграмма занимает около 250Mb!!! При этом страшно тормазит!

Что делать???

13.01.05 12:17: Перенесено из 'Вопросы разработчикам Microsoft [GDN]'
Память в .NET
От: Аноним  
Дата: 12.01.05 12:29
Оценка:
Так все-таки закрываем или уничтожаем? При уничножении убиваются все экземпляры всех классов, что дает системе сбора мусора почистить неиспользуемые (несвязанные ни с чем) куски памяти... В противном случае экземпляров будет все больше и больше... при каждом создании объекта.

Раньше все необъяснимое сваливали на потусторонние силы, а теперь на Photoshop =)


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Память в .NET
От: master1  
Дата: 12.01.05 14:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Так все-таки закрываем или уничтожаем? При уничножении убиваются все экземпляры всех классов, что дает системе сбора мусора почистить неиспользуемые (несвязанные ни с чем) куски памяти... В противном случае экземпляров будет все больше и больше... при каждом создании объекта.


Закрываю окно.
При создании нового ссылка ДОЛЖНА удалятся вень указатель на экземпляр объекта теряется...
Разве нет???
а
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect() again
вообще должна все очистить! но этого не происходит!
Re: Память в .NET
От: Аноним  
Дата: 12.01.05 14:39
Оценка:
Система сбора мусора работает как хочет и когда захочет, отловить момент очистки того или иного блока памяти практичеси невозможно... поэтому реально память может высвободиться к примеру через час работы с программой. =) В любом случае лучше всего емкие по объему занимаемой памяти окна уничтожать вручную... если это не поможет все-равно — имеет смысл задуматься о корректности работы самого Framework'а...

Раньше все необъяснимое сваливали на потусторонние силы, а теперь на Photoshop =)


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Память в .NET
От: dotter  
Дата: 12.01.05 14:42
Оценка:
А Dispose вызывается?
Re: Память в .NET
От: Аноним  
Дата: 12.01.05 14:47
Оценка:
Вот и я говорю... лучше ручками их мочить!

Раньше все необъяснимое сваливали на потусторонние силы, а теперь на Photoshop =)


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Память в .NET
От: V.Petrovski Беларусь  
Дата: 12.01.05 14:47
Оценка:
Здравствуйте, master1, Вы писали:

M>GC.Commit() не помогает....

Надо вызывать GC.Collect()

А если серьезней, то у тебя н лицо memory leak.
M>Что делать???
Бери в руки MemoryProfiler и в бой.
... << RSDN@Home 1.1.4 @@subversion >>
Память в .NET
От: Аноним  
Дата: 12.01.05 14:58
Оценка:
Господа, данный форум немного специфичен...
Вопросы в нем задаются людям непосредственно работающим в Microsoft.
Просьба не задавать тут таких простых вопросов, и тем более не ОТВЕЧАТЬ!

Все должно быть просто, очень просто, настолько просто — насколько это возможно.

Оренбургское сообщество .NET разработчиков
Робкий пингвин прячет тело жирное в утесах.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Память в .NET
От: master1  
Дата: 12.01.05 15:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Господа, данный форум немного специфичен...

А>Вопросы в нем задаются людям непосредственно работающим в Microsoft.
А>Просьба не задавать тут таких простых вопросов, и тем более не ОТВЕЧАТЬ!

на этот "пристой" вопрос никто ответить не может!
Re[2]: Память в .NET
От: mr_ST  
Дата: 12.01.05 15:40
Оценка:
Здравствуйте, Serega2k, Вы писали:

S>Система сбора мусора работает как хочет и когда захочет, отловить момент очистки того или иного блока памяти практичеси невозможно...

Вызывается при нехватке памяти...

S>поэтому реально память может высвободиться к примеру через час работы с программой. =) В любом случае лучше всего емкие по объему занимаемой памяти окна уничтожать вручную... если это не поможет все-равно — имеет смысл задуматься о корректности работы самого Framework'а...

Димпозить лучше явно, полностью согласен.
WBR, Alexander Markhonko
Re: Память в .NET
От: Аноним  
Дата: 13.01.05 08:45
Оценка:
>GC.Collect()
>GC.WaitForPendingFinalizers()
>GC.Collect() again
>вообще должна все очистить! но этого не происходит!



Если ссылки на выделенную память используются, то можно хоть 100 раз вызывать GC.Collect() — ЭТА ПАМЯТЬ НЕ ОСВОБОДИТЬСЯ


Более частый, чем это необходимо, вызов метода GC.Collect может отрицательно сказаться на производительности. Следует также избегать разрешать вызовы метода GC.Collect в точках кода программы, в которых пользователи смогут вызывать его слишком часто. Это может нарушить работу ядра оптимизации сборщика мусора, которое определяет наилучшее время выполнения сборки мусора.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.