Aufspüren Wenn Sie den Profiler in Visual Studio verwenden, um teure Funktionen aufzuspüren, habe ich gelegentlich gesehen, dass die meisten der Arbeit in [clr.dll] endet . Das ist im Grunde eine Black Box, und ich frage mich, ob es einen Weg gibt, herauszufinden, warum es dort so viel Zeit verbringt.Visual Studio Profiler, wie [Clr.dll] Verwendung
Ich gehe davon aus, dass clr.dll Dinge wie JIT kompilieren, Laden von Assemblys und Verwalten von Appdomains, Garbage Collection, Reflektion usw. behandelt. Aber es macht es wirklich schwierig zu sagen, welcher Code verursacht es so viel Zeit zu verbringen.
Offensichtlich ist es ein anderer Code neben der Laufzeit selbst, die verursacht, dass es so viel Zeit in clr.dll verbringen, also wie finden Sie, was Code falsch ist?
Für alles, was verwaltet wird, ist es eine wirklich gute Aufgabe, den gesamten Call-Stack zu verfolgen, es ist nur, wenn es in nativen Code kommt, dass es den Überblick verliert, welche Funktionen verantwortlich waren. Also pausiert es den Call-Stack manuell zu prüfen scheint, als sollte es nützlichere Ergebnisse geben. –
@Bryce: 1) Ja, aber ich nehme an, Ihr Code ist verwalteter Code (es sei denn, es ist nicht), und wenn Sie etwas reparieren können, ist es in * Ihrem Code *. 2) Der Profiler sammelt Stack-Informationen, aber das Problem ist, dass, anstatt Sie sehen zu lassen, was die Stack-Samples sagen, sie in Call-Trees & whatnot zusammenfassen. Das verliert die Information, die Sie brauchen: das volle Verständnis dessen, was genau in bestimmten Proben passiert, nicht in aggregierter Form. –