Windows服务中RuntimeHelpers.PrepareMethod的缺点

时间:2014-10-27 15:17:07

标签: c# jit

我正在研究在服务器(具有多个服务)启动后不久发生的问题延迟问题。

我添加了一个简单的方法,加载引用的DLL并对这些DLL中每个程序集中的每个类型的每个方法执行RuntimeHelpers.PrepareMethod,有效地JIT整个代码库(一个特定服务) 。这是使用Parallel.ForEach执行的,只需几秒钟(在四核处理器上100%)。这减少了第一次调用时的延迟问题几乎没有(因为我不是JIT的泛型方法)。它还具有非常低的价格,只需几秒钟的服务初始化。

然而,我的团队领导声称对服务器的这种修改不会投入生产,因为它不安全"并且可能会带来意想不到的结果,他提到动态加载(和卸载?)DLL。

我所描述的可能会带来意想不到的结果,例外等吗?

Windows管理服务的方式是否会影响RuntimeHelpers.PrepareMethod(反之亦然)?

在常规Windows应用程序中执行相同操作(在所有方法之前进行JIT操作)是不同的吗?

是否与DI冲突(我们正在使用IOC)?

如果我们动态加载DLL,它会以任何方式干扰吗?

一般而言,它会带来什么危害?

1 个答案:

答案 0 :(得分:1)

他几乎肯定是错的。

调用此功能不会打破"打破" CLR。

但是,它可能会导致JITter比其他情况更早地加载程序集 如果您稍后添加AssemblyResolve个处理程序,它们将不再有用,因为CLR已经尝试加载相关的程序集。