NGen для частичного доверия
У меня есть приложение.Net 4.0, которое мне нужно для повышения производительности кода, выполняемого в среде с частичным доверием. В частности, я хотел бы устранить необходимость JIT во время выполнения. Обычно это выполняется с использованием NGEN ( http://http//msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.100).aspx), но это не работает для сборок, работающих с частичным доверием, У меня есть другие варианты?
Native images that are generated with Ngen.exe can no longer be loaded into
applications that are running in partial trust.
1 ответ
В итоге я выполнил JIT во время выполнения с помощью метода PrepareMethod. Вместо того чтобы делать это внутри ненадежного приложения, я делал это в полностью доверенной части приложения, прежде чем тип был отправлен в частично доверенную изолированную программную среду для запуска. Я использовал механизм, подобный тому, который был найден в блоге Лиран Чен здесь:
public static void PreJITMethods(Assembly assembly)
{
Type[] types = assembly.GetTypes();
foreach (Type curType in types)
{
MethodInfo[] methods = curType.GetMethods(
BindingFlags.DeclaredOnly |
BindingFlags.NonPublic |
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.Static);
foreach (MethodInfo curMethod in methods)
{
if (curMethod.IsAbstract || curMethod.ContainsGenericParameters)
continue;
RuntimeHelpers.PrepareMethod(curMethod.MethodHandle);
}
}
}