windows服务中RuntimeHelpers.PrepareMethod的缺点

本文关键字:缺点 PrepareMethod RuntimeHelpers 服务 windows | 更新日期: 2023-09-27 18:27:56

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

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

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

我所描述的可能会带来意想不到的结果、异常等,这是真的吗?

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

与在常规Windows应用程序中执行相同操作(对所有方法进行JIT前处理)不同吗?

它与DI(我们使用的是IOC)冲突吗?

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

一般来说,它会造成什么危害?

windows服务中RuntimeHelpers.PrepareMethod的缺点

他几乎肯定错了。

调用此函数不会"破坏"CLR。

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