Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Note
Questo articolo è specifico per .NET Framework. Non si applica alle implementazioni più recenti di .NET, tra cui .NET 6 e versioni successive.
L'assistente jitCompilationStart al debug gestito viene attivato per segnalare quando il compilatore JIT inizia a compilare una funzione.
Symptoms
Le dimensioni del working set aumentano per un programma già in formato immagine nativo, perché mscorjit.dll viene caricato nel processo.
Cause
Non tutti gli assembly da cui dipende il programma sono stati generati in formato nativo o un assembly non è registrato correttamente.
Risoluzione
L'abilitazione di questo assistente al debug gestito consente di identificare quale funzione è in fase di compilazione JIT. Assicurarsi che l'assembly che contiene la funzione venga generato in formato nativo e registrato correttamente.
Effetto sul runtime
Questo assistente al debug gestito registra un messaggio subito prima della compilazione JIT di un metodo, quindi l'abilitazione di questo assistente al debug gestito ha un impatto significativo sulle prestazioni. Se un metodo è inline, questo assistente al debug gestito non genererà un messaggio separato.
Risultato
L'esempio di codice seguente mostra l'output di esempio. In questo caso, l'output mostra che, nel test dell'assembly, il metodo "m" nella classe "ns2.CO" è stato compilato tramite JIT.
method name="Test!ns2.C0::m"
Configuration
Il file di configurazione seguente mostra un'ampia gamma di filtri che possono essere usati per filtrare i metodi segnalati quando vengono compilati per la prima volta jit. È possibile specificare che tutti i metodi vengano segnalati impostando il valore dell'attributo name su *.
<mdaConfig>
<assistants>
<jitCompilationStart>
<methods>
<match name="C0::m" />
<match name="MyMethod" />
<match name="C2::*" />
<match name="ns0::*" />
<match name="ns1.C0::*" />
<match name="ns2.C0::m" />
<match name="ns2.C0+N0::m" />
</methods>
</jitCompilationStart >
</assistants>
</mdaConfig>
Example
L'esempio di codice seguente deve essere usato con il file di configurazione precedente.
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
public class Entry
{
public static void Main(string[] args)
{
C0.m();
C1.MyMethod();
C2.m();
ns0.C0.m();
ns0.C0.N0.m();
ns0.C1.m();
ns1.C0.m();
ns1.C0.N0.m();
ns2.C0.m();
ns2.C0.N0.m();
}
}
public class C0
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
}
public class C1
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void MyMethod() { }
}
public class C2
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
}
namespace ns0
{
public class C0
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
public class N0
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
}
}
public class C1
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
}
}
namespace ns1
{
public class C0
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
public class N0
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
}
}
}
namespace ns2
{
public class C0
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
public class N0
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static void m() { }
}
}
}