Утечка памяти RTL и VCL

Я использую FastMM4 в FullDebugMode для поиска утечек памяти, и я получаю много жалоб на UnicodeString, TList, TParameters и т. Д. Такие случаи, как этот:

A memory block has been leaked. The size is: 276
This block was allocated by thread 0x2928, and the stack trace (return addresses) at the time was:
404CFE [System][@GetMem$qqri]
408C0F [System][@NewUnicodeString$qqri]
408E40 [System][@UStrFromPWCharLen$qqrr20System.UnicodeStringpbi]
408F17 [System][InternalUStrFromPCharLen$qqrr20System.UnicodeStringpcii]
5C006B [Vcl.Themes][Themes.TUxThemeStyle.GetElementDetails$qqr27Vcl.Themes.TThemedScrollBar]
774861EF [GetWindowLongW]
74B6588B [Unknown function at DrawThemeParentBackground]
74B6586C [Unknown function at DrawThemeParentBackground]
74B6780B [Unknown function at OpenThemeData]
7748C5FE [Unknown function at gapfnScSendMessage]
77481B31 [Unknown function at PeekMessageA]

The block is currently used for an object of class: UnicodeString

A memory block has been leaked. The size is: 20    
This block was allocated by thread 0x2928, and the stack trace (return addresses) at the time was:
404CFE [System][@GetMem$qqri]
406EB3 [System][TObject.NewInstance$qqrv]
407556 [System][@ClassCreate$qqrpvzc]
406EE8 [System][TObject.$bctr$qqrv]
814DD8 [Datasnap.DBClient][Dbclient.TCustomClientDataSet.ClearActiveAggs$qqrv]
815359 [Datasnap.DBClient][Dbclient.TCustomClientDataSet.ResetAllAggs$qqro]
80D8AC [Datasnap.DBClient][Dbclient.TCustomClientDataSet.InternalOpen$qqrv]
6948D7 [Data.DB][Db.TDataSet.DoInternalOpen$qqrv]
69498F [Data.DB][Db.TDataSet.OpenCursor$qqro]
80CA87 [Datasnap.DBClient][Dbclient.TCustomClientDataSet.OpenCursor$qqro]
69484B [Data.DB][Db.TDataSet.SetActive$qqro]

The block is currently used for an object of class: TBits

Мой текущий отчет об утечке памяти составляет около двух мегабайт, и большая часть его содержимого похожа на это. Что случилось? Стоит ли мне беспокоиться о RTL и VCL внутренних устройствах и возможных утечках памяти внутри них? И, если да, что я могу с ними сделать?


person iMan Biglari    schedule 18.03.2013    source источник
comment
@DavidHeffernan Я попробую создать минималистичное приложение.   -  person iMan Biglari    schedule 18.03.2013


Ответы (1)


Следует ли мне беспокоиться о внутренностях RTL и VCL и возможных утечках памяти в них?

Возможно нет. Последние версии RTL / VCL чисты. Я не сталкивался с утечками по ним, хотя это не значит, что вы этого не сделаете.

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

person David Heffernan    schedule 18.03.2013
comment
К сожалению, FastMM не может перемещаться по дереву объектов, которые не освобождены, и упростить его для вас, но если у вас есть XE2 или XE3, попробуйте AQTime, и он поможет вам идентифицировать ваши реальные объекты, которые просочились. - person Warren P; 19.03.2013
comment
@WarrenP В прошлый раз, когда я допустил ошибку, разрешив AQTime на своей машине, IDE вылетела каждые 5 минут! - person David Heffernan; 19.03.2013
comment
Когда вышло последнее обновление XE3, с AQTime произошла некоторая странная вещь. Это так ужасно сломало AQTime, что AQTime стал бесполезным. Интересно, не был ли это хитрый заговор с целью незаметно вернуть то, что раздавалось бесплатно. Настоящим я снимаю свою печать одобрения с AQTime и smartbear. Это дерьмо дерьмо. - person Warren P; 19.03.2013