Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# windows服务中RuntimeHelpers.PrepareMethod的缺点_C#_Jit - Fatal编程技术网

C# windows服务中RuntimeHelpers.PrepareMethod的缺点

C# windows服务中RuntimeHelpers.PrepareMethod的缺点,c#,jit,C#,Jit,我正在调查服务器(具有多个服务)启动后不久发生的延迟问题 我添加了一个简单的方法,加载引用的DLL并对这些DLL中每个程序集中每个类型的每个方法执行RuntimeHelpers.PrepareMethod,有效地JIT整个代码库(一个特定服务)。这是使用Parallel.ForEach执行的,只需几秒钟(在四核处理器上为100%)。这将第一次调用的延迟问题减少到几乎为零(因为我没有JIT通用方法)。它还具有非常低的价格,只需初始化服务几秒钟 然而,我的团队负责人声称,这种对服务器的修改不会投入生

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

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

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

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

Windows管理服务的方式是否影响运行时帮助程序。PrepareMethod(或反之亦然)

在常规Windows应用程序中执行相同的操作(预JIT所有方法)是否不同

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

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


一般来说,这会带来什么危害呢?

他几乎肯定是错的

调用此函数不会“中断”CLR

但是,它可能会导致加载程序集时出现抖动,而不是以其他方式加载程序集。

如果以后添加
AssemblyResolve
处理程序,它们将不再有用,因为CLR已经尝试加载相关程序集。

这是一件毫无意义的事情,只需运行ngen.exe即可。一旦它成为服务器应用程序,它可能只运行一次。我们团队中没有人有使用NGEN的经验,因此我们也在探索不同的方法。显然,这个过程的重点是尽快加载程序集。你所说的
AssemblyResolve
没有帮助是什么意思?@QuanticProgramming:如果在添加
AssemblyResolve
处理程序之前加载程序集,该处理程序将没有帮助。