Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Помощник jitCompilationStart по управляемой отладке (MDA) активируется для отчета, когда JIT-компилятор начинает компиляцию функции.
Симптомы
Размер рабочего набора увеличивается для программы, которая уже находится в собственном формате изображения, так как mscorjit.dll загружается в процесс.
Причина
Не все сборки, от которых зависит программа, были созданы в собственном формате, или сборка не зарегистрирована правильно.
Разрешение
Включение этого MDA позволяет определить, какая функция компилируется JIT-код. Убедитесь, что сборка, содержащая функцию, создается в собственном формате и правильно зарегистрирована.
Влияние на среду выполнения
Этот MDA регистрирует сообщение непосредственно перед компиляцией метода JIT, поэтому включение этого MDA значительно влияет на производительность. Если метод является встроенным, этот MDA не создаст отдельное сообщение.
Выходные данные
В следующем примере кода показаны примеры выходных данных. В этом случае выходные данные показывают, что в тестовой сборке метод "m" класса "ns2.CO" был скомпилирован JIT-код.
method name="Test!ns2.C0::m"
Конфигурация
В следующем файле конфигурации показаны различные фильтры, которые можно использовать для фильтрации методов, сообщаемых при первом компиляции JIT. Можно указать, что все методы передаются, задав для атрибута name значение *.
<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
Следующий пример кода предназначен для использования с предыдущим файлом конфигурации.
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() { }
}
}
}