2010-04-06 6 views
6

W AQTime dla Delphi, może być bardzo szybki, aby dostać się do punktów zapalnych za pomocą obszarów i wyzwalaczy itp. Ale wydaje mi się, że szczególnie jeśli masz bardzo dużo kodu w obszarach do profilowania, to wykonanie zwalnia dramatycznie, nawet jeśli profilowanie NIE jest włączone.Dlaczego funkcja AQTime spowalnia wykonywanie, nawet jeśli profilowanie nie jest włączone i czy można zrobić coś dla niego?

Na przykład, jeśli chcę profilować określoną procedurę pod koniec programu, ale nie wiem, jak się tam nazywa, myślę, że ta procedura powinna być traktowana jako wyzwalacz i początkowy status wątków jako Wyłącz, a następnie wybierz "Pełne sprawdzenie według procedur/linii". Jednak kiedy to zrobię, wykonywanie programu spowolni mocno, zanim jeszcze zostanie uruchomiona procedura wyzwalacza.

Na przykład, jeśli "proces przygotowania" trwa około 5 minut bez AQTime, to po uruchomieniu z wyłączonym profilowaniem działa już od 30 minut i nadal działa, nawet jeśli wiem, że wyzwalacz jeszcze nie został uruchomiony. osiągnięty.

Wiem, że mogę spróbować to obejść, zmniejszając liczbę profilowanych linii/linii, ale to nie jest dobre rozwiązanie dla mnie, ponieważ chciałbym profilować wszystkie z nich, gdy dojdę do faktycznego wyzwalacza rutyna.

Innym, często lepszym rozwiązaniem jest uruchomienie aplikacji bez AQTime, a następnie użycie opcji Załącz do procesu po zakończeniu "przygotowania do pracy", ale działa to dobrze tylko wtedy, gdy wykonywanie zatrzymuje się w GUI w odpowiednim miejscu lub w inny sposób zapewnia odpowiednie ramy czasowe do wykonania mocowania. We wszystkich przypadkach tak nie jest.

Wszelkie uwagi na temat tego, dlaczego tak się dzieje i czy jest jeszcze coś do zrobienia, niż próba zredukowania kodu z obszarów lub późniejszego dołączenia do procesu?

+0

Jeśli nie znasz nazwy procedury, nie jest ona zbyt szczegółowa, prawda? –

+1

Czy poprosiłeś o wsparcie AutomatedQA, aby uzyskać pomoc w tej sprawie? – Lucero

+0

Znam procedurę, która uruchamia profilowany proces (dodaję to jako wyzwalacz), ale sama procedura może tworzyć duże łańcuchy wywołań we wszystkich obszarach aplikacji (mniej więcej), więc nie wiem, jaki kod dodać jako obszary. -Nie, nie zapytałem jeszcze AutomatedQA o to, myślę, że mogę iść z obejściem, ale zastanawiałem się, czy ktoś ma więcej informacji. –

Odpowiedz

4

AQTime jest profilerem narzędziowym. W czasie wykonywania, to zasadniczo otacza każdą metodę (lub linii, w zależności od sposobu masz skonfigurowane opcje) wybrałeś do profilu z własnym kodem, trochę tak:

begin 
    DoStuff(); 
end; 

... staje:

begin 
    AQTimeEnter('MethodName'); 
    try 
     DoStuff(); 
    finally 
     AQTimeLeave('MethodName'); 
    end; 
end; 

Robi to bezpośrednio w pliku wykonywalnym, zamiast modyfikować źródło, ale efekt jest w zasadzie taki sam. Kiedy profilowanie jest aktywne, dla tych wywołań jest znaczny narzut, ponieważ wystrzeliwują sporo i rejestrują sporo informacji.

Gdy profilowanie jest nieaktywne, mniejszy jest narzut, ponieważ nic nie rejestruje. Jednak wciąż istnieje pewne obciążenie dla samego wywołania metody plus blok try/finally.

Nie wiem, czy można coś zrobić w AQTime, aby poprawić to inne niż profilować mniej. Jednak można również wypróbować profiler próbkowania, który ma mniej narzutów dla samego profilera, ale może nie mieć połączeń z procedurami, które są wykonywane szybko.

+0

Dzięki, to też przyjąłem. Wydaje mi się nieco zaskakujące, że efekt może być tak duży, nawet podczas profilowania rutynowego poziomu (nie poziomu linii). Ale domyślam się, że nawet try-finally bloki i dodatkowe wywołania metod nawet bez prawdziwej zawartości sumują się, gdy jest ich dużo. –

5

Cóż, można spróbować mój wolny profilera oczywiście :-)
http://code.google.com/p/asmprofiler/

Posiada zarówno instrumentacji i pobieranie próbek profilowania możliwe. Nie ma wszystkich funkcji AQTime, ale przynajmniej jest darmowa (i bardzo niewielka utrata wydajności w przypadku zatrzymania profilowania).

+1

Wygląda ładnie - sprawdzę to ... Wygląda to jak dobry kandydat na DVD partnera Delphi. –

+0

Dzięki - też mógłbym to wypróbować. –

+0

Uważam, że AsmProfiler_Sampling v1.0.7.22 jest lepszy niż AqTime w pakiecie z najnowszymi wersjami Delphi – VibeeshanRC

2

Co masz na myśli, mówiąc "Pełna kontrola według procedur/linii". Istnieje wiele różnych procedur i linii. Procedury profilowania nie powinny spowalniać Twojej aplikacji. To nie dla mnie.Profilowanie według linii może być bardzo powolne, myślę, że właśnie to robisz teraz.

Ogólnie rzecz biorąc, chodzi o profilowanie według procedur, znajdowanie wąskich gardeł, a następnie profilowanie tych (i tylko tych) procedur według linii.

+0

Mam na myśli, że ten sam efekt dzieje się mniej więcej w obu. Ale moja aplikacja jest dość duża (ponad pół miliona linii kodu). Właściwie nie mogę w ogóle użyć pełnego sprawdzania liniami, ponieważ kiedy próbuję uruchomić aplikację, profilowanie zatrzymuje się automatycznie po kilku sekundach. Ten problem ustąpi, jeśli radykalnie zmniejszę powierzchnie, więc najwyraźniej liczba linii ma pewien górny limit, po którym zaczynają się pojawiać problemy (inne niż wydajność). Wiem, że należy zastosować podejście drążenia, ale przy każdym biegu trwającym około godziny, nie chciałbym robić ich zbyt wielu ... :( –

0

Czy próbowali za pomocą

AQtimeHelpers.EnableProfiling(false); 

na początku przygotowań, a następnie

AQtimeHelpers.EnableProfiling(True); 

po?

+0

Nie - nie chcę modyfikować Kod, jeśli to możliwe, aby uniknąć, ale dobrze jest wiedzieć, że coś takiego istnieje.Mógłbym spróbować, jeśli nie mogę użyć innych obejść w pewnym momencie - dzięki! –

0

Musisz użyć metody drążenia w dół. Najpierw określ obszary, które wymagają profilowania według procedury, określ, jakie procedury wymagają profilowania, profiluj je tylko i przełącz się na profilowanie linii tylko wtedy, gdy potrzebujesz dokładnie wskazać dokładną linię kodu wymagającą uwagi. Jeśli włączysz pełne profilowanie aplikacji po linii, instrumentacja wykonana przez AQTime będzie tak duża, a zebrane dane spowolnią Twoją aplikację.

+0

Wiem, że należy zastosować podejście drążenia, ale przy każdym biegu, nawet bez profilowania, biorąc na przykład 15 minut, nie chciałbym robić ich zbyt wielu ... :(Ale będę musiał się z tym pogodzić. –

Powiązane problemy