Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

Как не засорять память?   Найти похожие ветки 

 
olookin ©   (2003-12-15 14:09) [0]

Проблема состоит в следующем - при постоянной работе программы в памяти происходит накопление данных. Это я заметил давно и потому постарался корректно избавляться от динамических массивов, компонентов и экземпляров классов, которые периодически создаются или уничтожаются. Как выяснилось - или не до конца корректно, или не все элементы очищаю.

Что же я должен очищать? Мне кажется, следующие штуки:
- динамические массивы (после вызова SetLength(mas,N) использую mas:=nil или Finalize(mas))
- динамически создаваемые компоненты (после вызова Create использую Destroy или Free (где как))
- классы, которые содержат динамические массивы (в destructor-е класса все массивы приравниваю nil)
- записи, содержащие динамические массивы - то же самое
- если где то использую Parent, то стараюсь не забывать убивать этот Parent перед убиением самого компонента
- динамически создаваемые массивы классов (как правило содержащие еще и окно). Здесь все те же правила. За исключением того, что использую еще Move при удалении промежуточного элемента в массиве классов. Перед этим разумеется уничтожаю само окно.
- наконец, массивы, используемые при вызове библиотечных функций (передающиеся как переменная в библиотеку). Не знаю наверняка, удаляются ли они из памяти, если к ним применять nil.

Прав ли я в своих рассуждениях? Может что то еще нужно контролировать? (а то за несколько часов работы программа начинает кушать почти 40М памяти - это при начальных 6-7М)...

Заранее спасибо за помощь.


 
Иван Шихалев ©   (2003-12-15 14:13) [1]

Возможно, растет не занятая память в куче, а сама куча. Можно поэкспериментировать с HeapSize() и HeapCompact() (используя GetProcessHeap())



Страницы: 1 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
6-86476
Dosia
2003-10-29 22:52
2003.12.26
Как сделать сделать, чтобы каждый браузер работал со своим IP?


3-86298
bss
2003-12-04 09:52
2003.12.26
Delphi->ADO->Access, недостаточно сведений ключевого поля


4-86592
AlexenderG
2003-10-30 16:48
2003.12.26
Как можно осуществить поиск файлов и узнать время их модификации?


1-86354
Прямой
2003-12-15 20:25
2003.12.26
Поможите с ProgressBar_ом pls


4-86601
Sergey Koshelev
2003-10-30 16:55
2003.12.26
Таймер не запускается чаще, чем через 55 msec