C# windows服务中RuntimeHelpers.PrepareMethod的缺点
我正在调查服务器(具有多个服务)启动后不久发生的延迟问题 我添加了一个简单的方法,加载引用的DLL并对这些DLL中每个程序集中每个类型的每个方法执行C# windows服务中RuntimeHelpers.PrepareMethod的缺点,c#,jit,C#,Jit,我正在调查服务器(具有多个服务)启动后不久发生的延迟问题 我添加了一个简单的方法,加载引用的DLL并对这些DLL中每个程序集中每个类型的每个方法执行RuntimeHelpers.PrepareMethod,有效地JIT整个代码库(一个特定服务)。这是使用Parallel.ForEach执行的,只需几秒钟(在四核处理器上为100%)。这将第一次调用的延迟问题减少到几乎为零(因为我没有JIT通用方法)。它还具有非常低的价格,只需初始化服务几秒钟 然而,我的团队负责人声称,这种对服务器的修改不会投入生
RuntimeHelpers.PrepareMethod
,有效地JIT整个代码库(一个特定服务)。这是使用Parallel.ForEach执行的,只需几秒钟(在四核处理器上为100%)。这将第一次调用的延迟问题减少到几乎为零(因为我没有JIT通用方法)。它还具有非常低的价格,只需初始化服务几秒钟
然而,我的团队负责人声称,这种对服务器的修改不会投入生产,因为它“不安全”,可能会带来意外的结果,他提到动态加载(和卸载?)DLL
我所描述的可能会带来意想不到的结果、异常等,这是真的吗
Windows管理服务的方式是否影响运行时帮助程序。PrepareMethod(或反之亦然)
在常规Windows应用程序中执行相同的操作(预JIT所有方法)是否不同
它是否与DI冲突(我们正在使用IOC)
如果我们动态加载DLL,它会以任何方式进行干扰吗
一般来说,这会带来什么危害呢?他几乎肯定是错的 调用此函数不会“中断”CLR 但是,它可能会导致加载程序集时出现抖动,而不是以其他方式加载程序集。
如果以后添加
AssemblyResolve
处理程序,它们将不再有用,因为CLR已经尝试加载相关程序集。这是一件毫无意义的事情,只需运行ngen.exe即可。一旦它成为服务器应用程序,它可能只运行一次。我们团队中没有人有使用NGEN的经验,因此我们也在探索不同的方法。显然,这个过程的重点是尽快加载程序集。你所说的AssemblyResolve
没有帮助是什么意思?@QuanticProgramming:如果在添加AssemblyResolve
处理程序之前加载程序集,该处理程序将没有帮助。