Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> .NET Compact Framework 2.0 и утечка памяти 
V
    Опции темы
Gazon
Дата 25.11.2006, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 9.1.2005

Репутация: 3
Всего: 8



Используются CF 2.0 и Win 2003(или Win Mobile 5).

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



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

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



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

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

--------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться.
PM MAIL   Вверх
mr.DUDA
Дата 25.11.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



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


--------------------
user posted image
PM MAIL WWW   Вверх
archimed7592
Дата 26.11.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



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

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

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


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
-ser-
Дата 27.11.2006, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 5
Всего: 13



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


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


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 27.11.2006, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



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

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

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


--------------------
user posted image
PM MAIL WWW   Вверх
Gazon
Дата 27.11.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 9.1.2005

Репутация: 3
Всего: 8



все. победил.
--------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0723 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.