. net 3.5及更低版本的内联选项

本文关键字:选项 版本 net | 更新日期: 2023-09-27 18:04:50

为了提高性能,我经常发现需要内联扩展,不幸的是,需要使用MethodImplOptions。侵略性内联仅在。net 4.5及更高版本中可用。有没有其他的选择,比如代码片段?

. net 3.5及更低版本的内联选项

看起来您经常编写低级性能关键代码。我认为你的问题是一个有效的要求。您希望对内联何时发生有更多的控制。实际上,您希望将某个调用站点标记为强制内联。

不幸的是,在。net 4.5中,MethodImplOptions是控制内联的唯一方法。此外,到目前为止,. net JIT是一个非常糟糕的优化编译器。您可以期望它执行非常基本的优化,如保守内联、死代码消除和常量折叠。不过,你肯定不会感到惊讶。

唉,我只能给一个否定的答案。在当前版本的CLR中,你什么也做不了。


我注意到的是,你似乎将解析过的字符一个接一个地附加到一些"缓冲区"。试着把它们分成更大的块。cpu喜欢以更大的单位复制内存。记住当前文本跨度开始的位置。当它结束时,一次性复制该span中的所有字符(可能使用memcpy)。

虽然我同意经常内联扩张并不是为性能优化(最好)的答案,和思考大局往往可以产生更大的收益,包括删除整个方法的问题,有时是答案,在那种情况下,是。net 4.5与否,你必须复制粘贴代码,即内联,绝对肯定你得到你想要的效果,和在所有平台上的应用程序正在运行。这是丑陋的,不幸的是,性能优化常常使代码变得丑陋。

正如您已经发现的那样,有一个方法看起来是内联的完美候选。