Użyj Profiler w trybie śledzenia. Wtedy zobaczysz, jak wszystko dzwoni do siebie i gdzie spędza się czas. Oprócz komercyjnych profilerów są też darmowe. Kod zarządzany to NP Profiler, który jest całkiem niezły.
Jeśli chcesz zagłębić się, możesz użyć funkcji Windows Performance Toolkit, która zapewnia pełne informacje we wszystkich wątkach i sposób interakcji ze sobą, jeśli chcesz się dowiedzieć. Jedyna różnica polega na tym, że dostajesz stosy od jądra aż do twoich zarządzanych ramek.
Jeśli to nie wystarczy, możesz przydzielić swój kod za pomocą biblioteki śledzenia (automatycznie za pomocą PostSharp, ....) lub ręcznie lub za pomocą makra dla każdego pliku źródłowego. Zrobiłem małą bibliotekę śledzenia, która jest dość szybka i wysoce konfigurowalna. Zobacz here. Jako unikalna funkcja może automatycznie śledzić każdy zgłoszony wyjątek.
private void SomeOtherMethod()
{
using (Tracer t = new Tracer(myType, "SomeOtherMethod"))
{
FaultyMethod();
}
}
private void FaultyMethod()
{
throw new NotImplementedException("Hi this a fault");
}
Nadchodzi wyjście:
18:57:46.665 03064/05180 <{{ > ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeMethod
18:57:46.668 03064/05180 <{{ > ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeOtherMethod
18:57:46.670 03064/05180 < }}< ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeOtherMethod Exception thrown: System.NotImplementedException: Hi this a fault
at ApiChange.IntegrationTests.Diagnostics.TracingTests.FaultyMethod()
at ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeOtherMethod()
at ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeMethod()
at ApiChange.IntegrationTests.Diagnostics.TracingTests.Demo_Show_Leaving_Trace_With_Exception()
18:57:46.670 03064/05180 < }}< ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeOtherMethod Duration 2ms 18:57:46.689 03064/05180 < }}< ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeMethod Duration 24ms
Czy przyjrzał się http://stackoverflow.com/questions/171970/how-can-i-find-the-method-that-called-the-current-method –
nie mogę pomóc ale zastanawiaj się, dlaczego byś tego chciał. W przypadku wyjątku możesz wyświetlić stacktrace. Ale dlaczego chcesz mieć dziennik wszystkich wywołań metod? – comecme
Istnieje błąd, który możemy prześledzić do pewnego momentu, a następnie kontrola przechodzi do aplikacji nadrzędnej, która nie jest naszą aplikacją - więc nie ma kodu źródłowego (gdzieś po tym aplikacja przestaje odpowiadać). Aby dowiedzieć się, co jest wywoływane w naszej aplikacji, próbujemy tego. –