Решение стороннего производителя для сборки мусора в Delphi - PullRequest
4 голосов
/ 08 ноября 2010

Есть ли стороннее решение, VCL, плагины и т. Д. Для автоматического сбора мусора в Delphi для win32

Ответы [ 4 ]

11 голосов
/ 08 ноября 2010

Вы можете использовать интерфейсы для выполнения такой сборки мусора.

Если вы используете интерфейсы, а не классы, вам не нужно помещать явный блок try ... finally с вызовом бесплатного методав разделе, наконец,Компилятор сгенерирует его для вас, как с обычными строковыми методами.

Вы можете распространить этот трюк на каждый объект с помощью кода, подобного тому, что опубликован в http://edn.embarcadero.com/article/28217

Но это победилоне быть полным сборщиком мусора, как в Java или DotNet.Это только подсчет ссылок.

ИМХО полный сборщик мусора - зло .Управление памятью не сложно в Delphi.Вы напечатаете немного больше, но во всех случаях производительность и общее потребление памяти будут лучше без сборщика мусора.

3 голосов
/ 19 мая 2011

Вот «первое стороннее решение», которое я использовал все время, пока не выбрал интерфейсы:Когда вы создаете класс (или иногда целое приложение), первое, что вы делаете, это создаете TObjectList - затем каждый раз, когда вы вызываете конструктор, вы немедленно добавляете ссылку на свой новый экземпляр в свой TobjectList.В вашем деструкторе просто убедитесь, что вы освободили свой экземпляр TObjectList, и вы в порядке: по умолчанию TOBjectList владеет каждым объектом, который в нем содержится - поэтому, когда вы освобождаете свой TObjectList, все остальное будет очищено вместе с ним.

3 голосов
/ 08 ноября 2010

Существует API для Boehm Garbage Collector для Delphi.Но это будет работать только на Delphi <= 7 и без FastMM. </p>

2 голосов
/ 08 ноября 2010

вы можете использовать FastMM или MemCheck, чтобы увидеть, где вы забыли освободить память, но, насколько мне известно, сборщик мусора, полностью интегрированный в delphi для win32, не существует.

С наилучшими пожеланиями, Radu

...