Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .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, если проблема исключтельно в форме (т. е. без нее все ок), то попробуй
Добавлено @ 22:33 зы. потоков всмысле файловых\сетевых и им подобным ![]() Добавлено @ 22:37 а вообще, имхо, лучше сделать для себя правилом, что если класс реализует IDisposable, то нужно заключать код, использующий его экземпляры в using. это не всегда получается - структура программы иногда не позволяет, но лучше делать все возможное, чтобы избегать такой структуры программы, особенно на CF |
Автор: mr.DUDA 27.11.2006, 09:39 |
Это как раз таки управляемый ресурс. Отличие между неуправляемым и управляемым состоит в том, что управляемый ресурс рано или поздно будет удалён сборщиком мусора (для всего, что было выделено, есть финалайзер который закроет соединение с БД и т.п.), а неуправляемый - нет (например, IntPtr к объекту ОС). З.Ы. это не отменяет предыдущий вопрос -ser-, закрывать коннекшн надо. |
Автор: Gazon 27.11.2006, 11:54 |
все. победил. |