Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
14-86508
noj
2003-12-04 12:40
2003.12.26
Возможно ли отключение винчестеров без RAID


3-86287
rel_
2003-12-04 10:24
2003.12.26
помогите SQL запросом


6-86472
FireHack
2003-10-27 18:36
2003.12.26
Нумерация открытых хэндлов чужого процесса


1-86413
Jenaxx
2003-12-13 17:43
2003.12.26
Скажите как просто сгенерировать случайное число


3-86291
ploxish
2003-12-01 11:23
2003.12.26
Interbase & Generator





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский