2012-01-27 12 views
0

J'ai une application .Net 4.0 dont j'ai besoin pour améliorer les performances du code exécuté dans un environnement d'approbation partielle. Plus précisément, je voudrais éliminer le besoin de JIT à l'exécution. Normalement, ceci est accompli en utilisant NGEN (http://http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.100).aspx) mais cela ne fonctionne pas pour les assemblages fonctionnant en confiance partielle. Est-ce que j'ai d'autres options?NGen pour application de confiance partielle

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

Répondre

0

Ce que je fini par faire était d'effectuer le JIT lors de l'exécution via la méthode PrepareMethod. Au lieu de le faire à l'intérieur de l'application non approuvée, je l'ai fait dans la partie entièrement approuvée de l'application avant que le type ait été envoyé dans le sandbox partiellement approuvé pour être exécuté. J'ai utilisé un mécanisme similaire à celui trouvé sur le blog de 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); 
     } 
    } 
} 
Questions connexes