Cuando uso el generador de perfiles en Visual Studio para buscar funciones costosas, he visto en ocasiones que la mayor parte del trabajo termina en [clr.dll] . Eso básicamente equivale a una caja negra, y me pregunto si hay alguna forma de rastrear por qué está pasando tanto tiempo allí.Analizador de Visual Studio, cómo rastrear el uso de [clr.dll]
Supongo que clr.dll maneja cosas como la compilación JIT, cargando ensambles y administrando aplicaciones, recolección de basura, reflexión, etc. Pero hace que sea realmente difícil saber qué código hace que pase tanto tiempo.
Obviamente, es otro código, además del tiempo de ejecución en sí, el que está haciendo que pase tanto tiempo en clr.dll, entonces, ¿cómo rastrear qué código tiene la culpa?
Para cualquier cosa que sea código administrado, hace un muy buen trabajo al rastrear toda la pila de llamadas, es solo cuando entra en el código nativo que pierde la pista de las funciones responsables. Así que pausarlo para examinar la pila de llamadas parece que debería dar resultados más útiles. –
@Bryce: 1) Sí, pero supongo que su código es código administrado (a menos que no lo esté), y si hay algo que puede corregir, está en * su código *. 2) El generador de perfiles recopila información de la pila, pero el problema es que, en lugar de dejar ver lo que dicen las muestras de la pila, se resumen en árboles de llamadas y otras cosas. Eso pierde la información que necesita: la plena comprensión de qué está sucediendo exactamente en muestras particulares, no en conjunto. –