Einzelnen Beitrag anzeigen

schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#6

AW: Start und Stop jeder Methode Tracen an nur einer stelle Implementieren

  Alt 23. Feb 2012, 11:14
eine recht billige Variante ist mit einem Interface implementierbar - allerdings muss dann jede Methode, die gemessen werden soll, mit einer Zeile instrumentiert werden. Ich zeige hier mal ein kurzes Beispiel (aus dem Kopf runtergetippelt)

Delphi-Quellcode:
type
  IAutoDestroy = interface(IInterface)
  end;

  TMeasure = class(TInterfacedObject, IAutoDestroy)
  protected
    FMessage: string;
    procedure Log(const msg: string);
  public
    class function MeasureThis(const msg: string): IAutoDestroy
    constructor Create(const msg: string); reintroduce;
    destructor Destroy; override;
  end;

// ...

class function TMeasure.MeasureThis(const msg: string): IAutoDestroy
begin
  Result := TMeasure.Create(msg);
end;

constructor TMeasure.Create(const msg: string);
begin
  inherited Create;
  // Log msg
  FMessage := msg;
  Log('Beginn: ' + FMessage);
end;

destructor TMeasure.Destroy();
  Log('Ende: ' + FMessage);
end;

procedure TMeasure.Log(const msg: string);
begin
  Writeln(FormatDateTime('HH:MM:SS', Now), ' [', GetCurrentThreadId(), '] ', msg);
end;
Die Verwendung ist dann so:

Delphi-Quellcode:
procedure TForm.ButtonClick(...)
begin
  TMeasure.MeasureThis('TForm.ButtonClick');
  Writeln('Muuh');
  Sleep(1000);
end;
die Ausgabe ist dann etwa so:

Code:
11:12:00 [123] Beginn: TForm.ButtonClick
Muuh
11:12:01 [123] Ende: TForm.ButtonClick
Das lässt sich natürlich noch beliebig verfeinern
  Mit Zitat antworten Zitat