По мотивам - Коротко. Контроль за созданием/освобождением объектов. Только код. №4
А ещё мы сделали вывод в лог статистики использованных объектов при работе приложения.
Вот примерно так:
MindStream.exe.objects.log
По мне - это крайне полезно.
Ключевой код вот:
Сам код тут - https://bitbucket.org/ingword/mindstream/src/70742a15a94e67beecfba8f3dcc7bfaa61d4a38a/Core/msCoreObjects.pas?at=Developing
А ещё мы сделали вывод в лог статистики использованных объектов при работе приложения.
Вот примерно так:
MindStream.exe.objects.log
Неосвобождено объектов: 0 TmsPaletteShape Неосвобождено: 0 Максимально распределено: 5 TmsPaletteShapeCreator Неосвобождено: 0 Максимально распределено: 1 TmsUpArrow Неосвобождено: 0 Максимально распределено: 1 TmsDashDotLine Неосвобождено: 0 Максимально распределено: 164 TmsLine Неосвобождено: 0 Максимально распределено: 278 TmsRectangle Неосвобождено: 0 Максимально распределено: 144 TmsCircle Неосвобождено: 0 Максимально распределено: 908 TmsLineWithArrow Неосвобождено: 0 Максимально распределено: 309 TmsDiagrammsController Неосвобождено: 0 Максимально распределено: 1 TmsStringList Неосвобождено: 0 Максимально распределено: 3 TmsCompletedShapeCreator Неосвобождено: 0 Максимально распределено: 2 TmsRoundedRectangle Неосвобождено: 0 Максимально распределено: 434 TmsTriangleDirectionRight Неосвобождено: 0 Максимально распределено: 5 TmsGreenCircle Неосвобождено: 0 Максимально распределено: 850 TmsSmallTriangle Неосвобождено: 0 Максимально распределено: 761 TmsShapeCreator Неосвобождено: 0 Максимально распределено: 1 TmsDashLine Неосвобождено: 0 Максимально распределено: 868 TmsGreenRectangle Неосвобождено: 0 Максимально распределено: 759 TmsDiagramm Неосвобождено: 0 Максимально распределено: 910 TmsDownArrow Неосвобождено: 0 Максимально распределено: 1 TmsDotLine Неосвобождено: 0 Максимально распределено: 274 TmsDiagramms Неосвобождено: 0 Максимально распределено: 3 TmsDiagrammsHolder Неосвобождено: 0 Максимально распределено: 18 TmsPointCircle Неосвобождено: 0 Максимально распределено: 717 TmsUseCaseLikeEllipse Неосвобождено: 0 Максимально распределено: 397 TmsBlackTriangle Неосвобождено: 0 Максимально распределено: 43 TmsRedRectangle Неосвобождено: 0 Максимально распределено: 139 TmsMoverIcon Неосвобождено: 0 Максимально распределено: 220 TmsTriangle Неосвобождено: 0 Максимально распределено: 437
По мне - это крайне полезно.
Ключевой код вот:
class destructor TmsObjectsWatcher.Destroy; begin if (f_ObjectsCreated <> nil) then if (f_ObjectsCreated.Count > 0) then begin // Далее выводим статистику неосвобождённых объектов в лог: TmsLog.Log(ParamStr(0) + '.objects.log', procedure (aLog: TmsLog) var l_Item : TPair<String, TmsClassInstanceCount>; begin aLog.ToLog('Неосвобождено объектов: ' + IntToStr(f_ObjectsCreatedCount)); for l_Item in f_ObjectsCreated do begin aLog.ToLog(l_Item.Key + ' Неосвобождено: ' + IntToStr(l_Item.Value.rCount) + ' Максимально распределено: ' + IntToStr(l_Item.Value.rMaxCount)); end;//for l_Key end ); end;//f_ObjectsCreated.Count > 0 FreeAndNil(f_ObjectsCreated); FreeAndNil(f_DefferedObjects); if (f_ObjectsCreatedCount > 0) then raise Exception.Create('Какие-то объекты не освобождены: ' + IntToStr(f_ObjectsCreatedCount)); end;
Сам код тут - https://bitbucket.org/ingword/mindstream/src/70742a15a94e67beecfba8f3dcc7bfaa61d4a38a/Core/msCoreObjects.pas?at=Developing
Комментариев нет:
Отправить комментарий