我有一个.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.
答案 0 :(得分:0)
我最终做的是通过PrepareMethod方法在运行时执行JIT。我没有在不受信任的应用程序中执行此操作,而是在将类型发送到部分受信任的沙箱中运行之前,在应用程序的完全受信任部分中执行此操作。我使用的机制与Liran Chen的博客here上的机制类似:
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);
}
}
}