2012-01-27 9 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); 
     } 
    } 
}