Pomiar czasu wykonania każdej funkcji i procedury

0

Cześć,

jak zmierzyć czas wykonywania procedur / funkcji w programie?

TJvProfiler robi dokładnie to co potrzebuję ale problemem jest implementacja, bo tych funkcji / procedur mam setki i dopisanie nawet tych kilku linijek do każdej to mnóstwo pracy.

Jest jakiś sposób aby zrobić to np. jakimś komponentem automatycznie?

Ps.
Próbowałem SamplinkProfiler oraz Spider ale albo nie spełnia to moich oczekiwań albo po prostu nie umiem tego odpowiednio używać.

0

perf, Valgrind? (zależnie od systemu)

1
robertz68 napisał(a):

Cześć,

jak zmierzyć czas wykonywania procedur / funkcji w programie?

TJvProfiler robi dokładnie to co potrzebuję ale problemem jest implementacja, bo tych funkcji / procedur mam setki i dopisanie nawet tych kilku linijek do każdej to mnóstwo pracy.

Jednak poszedłbym w tym kierunku, z tym że instrumentację zamknąłbym w jednej linii kodu.
Nie znam TJvProfiler i nie wiem jak działa, ale...

To się na pewno da zrobić (zapakować wszystko do jednej linii kodu), np. w ten sposób:
Host.Logger.LoggerDebug.TraceMethod('TSopOrderDetApprovedLogic.diEntityAfterCreate').StartProfiler;

Zauważ, że TraceMethod zwraca interfejs, a ten posiada metodę StartProfiler
Utworzenie tego interfejsu przygotowuje instrumentację dla danego zakresu.
Kiedy kod wychodzi z metody diEntityAfterCreate , to niszczony jest też interfejs instrumentacji.

A więc w konstruktorze klasy implementującej interfejs instrumentacji robisz pełne przygotowanie jej.
A w destruktorze, zamykasz instrumentację dla danego zakresu (tu metody diEntityAfterCreate).

W efekcie czego, wymaga to dopisanie jednej linii kodu do każdej metody, którą chcesz śledzić.
Poza tym, łatwo wyłączyć globalnie profilowanie, co pozwoli nie usuwać kodu profilera.
Jasne, możesz do tego też użyć dyrektywy kompilatora - jak już wygodniej.

Jest jakiś sposób aby zrobić to np. jakimś komponentem automatycznie?

Tak, można. Ten kod trzeba dopisać, ale np. CodeSite (w pełnej wersji) posiada generator kodu, który wrzuci Ci instrumentację do wybranych metod.

Ps.
Próbowałem SamplinkProfiler oraz Spider ale albo nie spełnia to moich oczekiwań albo po prostu nie umiem tego odpowiednio używać.

A to nie wiem jakie potrzeby masz ;-)

1
robertz68 napisał(a):

Próbowałem SamplinkProfiler oraz Spider ale albo nie spełnia to moich oczekiwań albo po prostu nie umiem tego odpowiednio używać.

Dwie błondynki:
- Ja się rozstałam ze swoim chłopakiem.
- Czemu?
- Nie spełniał moich oczekiwań.
- Jakich oczekiwań?
- Skąd mam wiedzieć? Przecież nie spełniał.

1

@_13th_Dragon: moje oczekiwanie (napisałem):

jak zmierzyć czas wykonywania procedur / funkcji w programie?

a skoro ani jeden ani drugi program nie pokazuje czasu działania procedur / funkcji to raczej nie spełnia moich oczekiwań? No chyba że nie umiem ich używać co także napisałem?

Acha, żeby nie było że tylko biorę a nic nie daję to znalazłem GPProfile. Robi dokładnie to czego potrzebuję czyli pokazuje czas działania procedur / funkcji. Implementacja także jest prosta (tego też oczekiwałem) bo automatycznie dopisuje potrzebny kod a po wszystkim można go automatycznie usunąć.

Miłego pierwszego dnia wiosny kalendarzowej - żeby nie było że jestem nieprecyzyjny ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1