Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Утечка памяти..... [D7]


Страницы:   1 2

Adventure ©   (2007-08-13 11:50:00) 

Господа, у кого есть опыт отслеживания и нахождения утечки памяти в программах? Все доступные в инете компоненты  "определители" либо не хотят работать при внедрении в код либо не работают.

У меня достаточно большой проект включающий и базы данных и сетевые подключения и вот в чем проблема:

1. Раз в час (приблизительно) обьем памяти выделяемый системой для данных увеличивается в 2 раза.
2. При запуске программы может появится, а может нет ошибка "Out of Memory"

Не могу понять. Весть текст перепроверил сто раз ...


Adventure   (2007-08-16 14:30:00) [1]

:-)


Сергей М.   (2007-08-16 14:23:00) [2]


> все перепроверил и исправил


Малацца)

Хотелось бы еще при этом верить, что о времени жизнипеременных и переменных с управляемым временем жизниты знаешь не понаслышке.


Adventure   (2007-08-16 14:19:00) [3]


> С чего ты так в этом уверен ?


Уверен, потому, что все перепроверил и исправил. Все работает "как часы"


Сергей М.   (2007-08-16 14:16:00) [4]


> Ни один динамический массив выделяемый через SetLength не
> освобождался


С чего ты так в этом уверен ?


> выделялся по Setlength обьем превышающий всю оперативку


Причем здесь "оперативка" ?

Менеджер памяти, к которому обращается все та же SetLength() и иже с ней функции, запрашивающие распределение/перераспределение/освобождение памяти, не оперирует оперативной памятью - вся работа идет с виртуальнойпамятью процесса.


Adventure   (2007-08-16 13:57:00) [5]

Господа, всем огромнейшее спасибо!

Все оказалось проще.
Я купил в интернете один готовый модуль (в исходниках) для своего проекта и естественно, так как это "продажный" вариант даже не рассматривал его на ошибки. А все оказалось в нем!!! Ни один динамический массив выделяемый через SetLength не освобождался, кроме того не было проверки на ошибочные данные и в непредвиденных ситуациях выделялся по Setlength обьем превышающий всю оперативку.

Еще раз спасибо всем и ... пишите проги сами.


Rouse_   (2007-08-15 10:28:00) [6]

Обычно при выпадении 0EEDFADE если выполнить GlobalMemoryStatus то результат будет примерно такой:

Статистика использования памяти:
- Процент занятой физической памяти: 52%
- Объем физической памяти: 255 Мб
- Свободно физической памяти: 32 Мб
- Объем файла подкачки: 1794 Мб
- Свободное место в файле подкачки: 1732 Мб


Rouse_   (2007-08-15 10:26:00) [7]

0EEDFADE? Старая ошибка. Оперативы добавь... наш комплекс на слабых тачках тоже с этой ошибкой падает, всегда добавление оперативки выручало...


Сергей М.   (2007-08-15 09:23:00) [8]


> Обнаружилось аварийное завершение какого-то потока


> Как найти это место в исходнике ?


Прежде чем его искать (а ты его заведомоне найдешь с пом. Search -> Find Error), сделай общую обработку непредвиденных исключений в потоках с протоколированием.

procedure TSomeThread.Execute;
begin
 try
  ...
 execute
   on e:exception do
     WriteToLog('Thread ' + IntToStr(ThreadId) + ', exception class ' + e.ClassName + #10#13 + e.Message);
 end;
end;


sniknik   (2007-08-14 16:55:00) [9]

> Exception 0EEDFADE Unknown exception at 7C4EA4E1
> Как найти это место в исходнике ?
выделенное и есть указание "адреса", под отладчиком выполни пункт меню "Find Error..." и набери указанные цифры.


Adventure   (2007-08-14 16:19:00) [10]


> MemProof пробовал?
>

Пробую... И вот какая штука.
Обнаружилось аварийное завершение какого-то потока.
Под отладчиком - тишина, а это програмулина выдет, что:

Exception 0EEDFADE Unknown exception at 7C4EA4E1

Как найти это место в исходнике ?

Я понимаю, что вопрос может и для начинающих, но не могу сообразить.


DVM   (2007-08-13 13:43:00) [11]


> Все доступные в инете компоненты  "определители" либо не
> хотят работать при внедрении в код либо не работают.

MemProof пробовал?


Adventure   (2007-08-13 13:31:00) [12]

Пока беру тайм аут.
После изменения настроек BDE пропала (пока) утечка.....


Сергей М.   (2007-08-13 13:08:00) [13]


> при многопоточной отладке IDE глючит весьма и весьма


У меня ничего не "глючит" и не "зависает".
А если что-то и происходит непонятное, то это для отладки как правило непринципиально.


jack128_   (2007-08-13 13:05:00) [14]


> Отладчик успешно справляется с этим..

нет, как раз при многопоточной отладке IDE глючит весьма и весьма. Обычно это проявляется в банальном зависании Дельфи..

---

> Adventure ©  

А FastMem - совсем не помогает??


Сергей М.   (2007-08-13 12:51:00) [15]


> что с утечкой делать?


Привел бы ты хоть какой-либо код из состава своего проекта ..

Ну, скажем, код ответственный за "таблица начинает заполнятся из интернета данными" ..


Adventure   (2007-08-13 12:45:00) [16]


> то это както регулируется в настройках BDE


Сделал изменения в настройках..... Пока работает. Посмотрим, что будет.

А вот, что с утечкой делать?


Adventure   (2007-08-13 12:19:00) [17]


> используется BDE?

Да. BDE (Paradox базы)
Не нашел пока альтернативы (конкретно к этой задаче)
При запуске программы часть таблиц удаляется и создаются новые, проверяется корректность таблиц (открытие в try except), "плохие" создаются заново.

Затем одна таблица начинает заполнятся из интернета данными (до 1000 записей враз с проверкой, корректировкой,редактированием, автоподстановками из других таблиц и все в потоках. Вот в этот момент и появляется (или нет) сообщение "Out Of Memory".
Во время работы (сутки - двое) это сообщение появляет (или нет) эпизодически.


sniknik   (2007-08-13 12:06:00) [18]

> Программа многопоточная. До 30 разных Thread запускается постоянно.
и в каждом работа с базой? ... ну вот, точно BDE.


sniknik   (2007-08-13 12:05:00) [19]

> 2. При запуске программы может появится, а может нет ошибка "Out of Memory"
используется BDE?
гдето 8-13 незакрытых сессий в нем приводит к этой ошибке. можеш проверить, сделай минимальное приложение 1 форма и одна открытая таблица (TTable) на ней, после компиляции запусти получившуюся прогу 14 раз. удалось? сообщение похоже?
если это то, то это както регулируется в настройках BDE, т.е. можно увеличить количество, но я не знаю как (и не стремлюсь узнать, т.к. не пользуюсь).

+ еще вроде похожую (если не туже самую) ошибку дает одновременное использование BDE и Jet в определенных условиях. лень описывать. давай больше исходной инфы, может узнает кто ситуацию.


Сергей М.   (2007-08-13 12:04:00) [20]


> С отладчиком очень сложно


А без отладчика никак, хочешь ты того или не хочешь.


> многопоточная


И что ?
Отладчик успешно справляется с этим..


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо