Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > .NET Compact Framework 2.0 и утечка памяти


Автор: Gazon 25.11.2006, 22:06
Используются CF 2.0 и Win 2003(или Win Mobile 5).

Как вообще обстоят дела с памятью у CF 2.0? Проблема в том, что память в программе не освобождается, доходит до outofmemoryexception.



В приложении не использую никаких не управляемых ресурсов.

В приложении надо часто создавать и показывать объекты модальной формы одного и того же класса с разными результатами выборки. Форма делает запрос в базу, строит дерево по выборке(создаются типизированные коллекции), после этого коллекции обрабатываются и создаются таблицы и гриды для редактирования данных. После этого результаты сохраняются, форма закрывается. И так происходит несколько раз. Ссылка на форму существует только одна и каждый раз ссылка обнуляется при закрытии формы и под ссылку выделяется новый объект при сл. создании формы.



Но память не освобождается после каждого закрытия формы и в один момент вылетает outofmemoryexception.

Все попытки обнулять все возможные ссылки внутри формы(хотя ссылка на форму при ее закрытии обнуляется), и попытки вызвать GC.Collect ни к чему не приводят.

Автор: mr.DUDA 25.11.2006, 23:02
Возможно, форму держит в памяти подписка на её события. Вообще, желательно убедиться что везде где есть обработчики событий между различными объектами, подписавшийся объект отписывается от всех событий других объектов при Dispose.

Автор: archimed7592 26.11.2006, 22:32
Gazon, если проблема исключтельно в форме (т. е. без нее все ок), то попробуй
Код
using (Form2 f = new Form2())
    f.ShowDialog();
и тож самое для всех запросов, подключений к бд, потоков и т. п.

Добавлено @ 22:33 
зы. потоков всмысле файловых\сетевых и им подобным smile

Добавлено @ 22:37 
а вообще, имхо, лучше сделать для себя правилом, что если класс реализует IDisposable, то нужно заключать код, использующий его экземпляры в using. это не всегда получается - структура программы иногда не позволяет, но лучше делать все возможное, чтобы избегать такой структуры программы, особенно на CF

Автор: -ser- 27.11.2006, 03:39
Цитата(Gazon @  25.11.2006,  22:06 Найти цитируемый пост)
В приложении не использую никаких не управляемых ресурсов.
...
Форма делает запрос в базу ...


господа, а разве соединение с базой не есть неуправляемый ресурс?
Gazon, у тебя коннекшн к базе закрывается?  

Автор: mr.DUDA 27.11.2006, 09:39
Цитата(-ser- @  27.11.2006,  02:39 Найти цитируемый пост)
а разве соединение с базой не есть неуправляемый ресурс?

Это как раз таки управляемый ресурс. Отличие между неуправляемым и управляемым состоит в том, что управляемый ресурс рано или поздно будет удалён сборщиком мусора (для всего, что было выделено, есть финалайзер который закроет соединение с БД и т.п.), а неуправляемый - нет (например, IntPtr к объекту ОС).

З.Ы. это не отменяет предыдущий вопрос -ser-, закрывать коннекшн надо.

Автор: Gazon 27.11.2006, 11:54
все. победил.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)