2012-01-27 16 views
0

부분 신뢰 환경에서 실행되는 코드의 성능을 향상시키는 데 필요한 .Net 4.0 응용 프로그램이 있습니다. 특히 런타임시 JIT에 대한 필요성을 없애고 싶습니다. 일반적으로이 작업은 NGEN (http://http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.100).aspx)을 사용하여 수행되지만 부분 신뢰로 실행되는 어셈블리에는 작동하지 않습니다. 다른 옵션이 있습니까?부분 신뢰 응용 프로그램 용 NGen

Native images that are generated with Ngen.exe can no longer be loaded into 
applications that are running in partial trust. 

답변

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); 
     } 
    } 
}