避免C#JIT开销

end*_*ian 7 c# jit

是否有一种简单的方法可以预先JIT编写C#代码,而不是等待第一次调用代码?我读过NGEN,但我认为这不会对我有所帮助.

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

我最初的想法是,我可以为每个关键路径方法添加一个bool参数,并在事件发生之前调用这些方法,以便启动JIT编译.但是,是否有更漂亮,更少hacky的方式?

非常感谢

Ton*_*Lee 6

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

但是,要回答你的问题,这篇关于如何预先使用jitSystem.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod来强制使用JIT的文章.它包含使用反射来获取方法句柄的示例代码.

  • 非常好,谢谢.我还发现了一篇CodeProject(!)文章,它包含了对整个类型的PrepareMethod调用.链接到这里:http://www.codeproject.com/KB/dotnet/Jitting.aspx. (2认同)