Podczas korzystania z profilera w Visual Studio do wyśledzenia drogich funkcji, widziałem czasami, że większość pracy kończy się w [clr.dll] . To w zasadzie sprowadza się do czarnej skrzynki i zastanawiam się, czy istnieje sposób na wyśledzenie, dlaczego spędza się tam tak dużo czasu.Profiler programu Visual Studio, jak wyśledzić użycie [clr.dll]
Zakładam, że clr.dll obsługuje takie rzeczy jak kompilacja JIT, ładowanie złożeń i zarządzanie aplikacjami domowymi, zbieranie śmieci, odbicie itp. Jednak naprawdę trudno jest powiedzieć, jaki kod powoduje to spędzanie tak dużo czasu.
Oczywiście jest to inny kod, poza samym runtime, który powoduje, że spędza on tyle czasu w clr.dll, więc jak wyśledzić, który kod jest winny?
Dla wszystkiego, co jest zarządzanym kodem, robi naprawdę dobrą robotę śledzenia całego stosu wywołań, to właśnie kiedy dostaje się do kodu natywnego, traci informacje o tym, które funkcje były odpowiedzialne. Tak więc pauza to sprawdzić ręcznie stos wywołań wydaje się, że powinien dać więcej przydatnych wyników. –
@Bryce: 1) Tak, ale zakładam, że twój kod to kod zarządzany (chyba że nie jest), a jeśli jest coś, co możesz naprawić, to jest to * twój kod *. 2) Profiler zbiera informacje o stosie, ale problemem jest to, że zamiast pokazywać, co mówią stosy, podsumowują one drzewa wywołań i inne. To traci potrzebne informacje: pełne zrozumienie, co dokładnie dzieje się w konkretnych próbkach, a nie w zbiorach. –