避免c# JIT开销

本文关键字:开销 JIT 避免 | 更新日期: 2023-09-27 18:13:07

是否有一种简单的方法可以预先编译c#代码,而不是等待代码第一次被调用?我读过关于NGEN的书,但我不认为那对我有帮助。

我的应用程序等待并响应来自UDP端口的特定外部事件,并且没有任何关键路径代码(a)在事件到达之前运行,或者(b)再次运行,因此在这种情况下JIT的成本很高。用ANTS分析器检查JIT的开销约为40-50%,有时高达90%。我的应用程序对延迟非常敏感,每一毫秒都很重要。

我最初的想法是,我可以为每个关键路径方法添加一个bool参数,并在事件发生之前调用这些方法,以便启动JIT编译。然而,有没有一种更漂亮、更不粗俗的方式呢?

多谢

避免c# JIT开销

我想说使用NGEN,如果它不起作用,你可能有更深层次的问题。

但是,为了回答您的问题,本文将讨论如何使用System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod预JIT来强制JIT。它包括使用反射来获取方法句柄的示例代码。

事件第二次到达时会发生什么?它是更快还是一样慢?如果它仍然很慢,那么JIT不是问题,因为代码只在第一次运行时被"JIT"一次。

NGEN会为你提供答案。我的建议是选择你需要的最少的代码,如果你愿意的话,关键路径,并把它放在虚拟/沙盒项目中。开始分析/NGenning这段代码并查看性能。

如果这个最小的代码,即使在经过NGEN'ed之后在多个调用中表现不佳,那么预编译将无法帮助您。是代码中的其他东西导致了性能瓶颈。