По мотивам - Коротко. Контроль за созданием/освобождением объектов. Только код. №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
Комментариев нет:
Отправить комментарий