我正在调查服务器(具有多个服务)启动后不久发生的延迟问题。
我添加了一个简单的方法来加载引用的 DLL 并执行RuntimeHelpers.PrepareMethod
在这些 DLL 中每个程序集中的每个类型的每个方法上,有效地 JIT 整个代码库(一个特定服务的)。这是使用执行的Parallel.ForEach
只需几秒钟(在四核处理器上为 100%)。这将第一次调用的延迟问题减少到几乎没有(因为我不是 JIT-ing 通用方法)。它还具有非常低的价格,只需几秒钟的服务初始化时间。
然而,我的团队领导声称这种对服务器的修改不会投入生产,因为它“不安全”并且可能会带来意想不到的结果,他提到动态加载(和卸载?)DLL。
我所描述的是否真的可能会带来意想不到的结果、异常等?
Windows 管理服务的方式是否会影响RuntimeHelpers.PrepareMethod
(或相反亦然) ?
与在常规 Windows 应用程序中执行相同的操作(预 JIT 所有方法)有什么不同吗?
它与 DI 冲突吗(我们正在使用 IOC)?
如果我们动态加载 DLL,它会以任何方式干扰吗?
一般来说,它会带来什么危害?
他几乎肯定是错的。
调用此函数不会“破坏”CLR。
但是,它可能会导致 JITter 比原本应该加载的程序集更早加载。
如果你添加AssemblyResolve
稍后,它们将不再提供帮助,因为 CLR 已经尝试加载相关程序集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)