NGen для частичного доверия - PullRequest
0 голосов
/ 27 января 2012

У меня есть приложение .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 Ответ

0 голосов
/ 01 февраля 2012

В итоге я выполнил 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);
        }
    }
}
...