NGen для приложения частичного доверия

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

person Matt Ruwe    schedule 27.01.2012    source источник


Ответы (1)


В итоге я выполнил 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);
        }
    }
}
person Matt Ruwe    schedule 01.02.2012