вторник, 13 января 2015 г.

MindStream. Коротко. Статистика использования объектов

По мотивам - Коротко. Контроль за созданием/освобождением объектов. Только код. №4

А ещё мы сделали вывод в лог статистики использованных объектов при работе приложения.

Вот примерно так:

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

Комментариев нет:

Отправить комментарий