|
#1
|
|||
|
|||
Удаление объектов
Подскажите в чём проблема. Создал свой класс. В процессе выполнения программы создаю много экземпляров данного класса, на что тратится оперативная память (отслеживаю в диспетчере задач). Созданные объекты удаляю FreeAndNil(IntObj). Но память не освобождается. В чём причина.
|
#2
|
|||
|
|||
Какя ОС?
Дело в том, что в большинстве версий Винды память сразу обратно не отдается, т.е. менеджер памяти все еще резервирует ее за процессом. Это "нормальный" процесс и упавлять им, к сожалению, программно невозможно. Вообще, в дельфе есть глобальная переменная, в которой можно посмотреть сколько взял менеджер память Дельфи. AllocMemSize, кажется. |
#3
|
|||
|
|||
код класса в студию.
если в классе используешь TList или какие то еще подклассы то надо писать деструктор. Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. |
#4
|
|||
|
|||
Цитата:
А мне казалось что проца FreeAndNil(IntObj). продназначена не только для уничтожения переменной класса но и очищение памяти которая она занимала?! Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. |
#5
|
|||
|
|||
Уничтожение класса и есть очистка памяти. Эта процка просто еще указателю Nil присваивает, только и всего. А по поводу зарезервированной памяти под процесс менеджером Винды - это отдельная исторя. Искал способ сказать ему, что бы он забрал уже ненужную память - так и не нашел (надо было на одном проекте). Вроде в Windows Server 2008 это сделано нормально. Еще говорять что в Vista 64 тоже нормально работает. а во всем, что раньше, наблюдается именно такая ситуация - программа память отдала, но она остается приписанной к процессу. Можно свернуть прикладу, тогда менеджер памяти Винды заберет эту память. а как сделать это программно - никто не знает (думаю, только M$ знает, но не говорит).
|