关于c#:. NET 3.5及更低版本中内联的替代方法

Alternatives for inlining in .NET 3.5 and lower

为了提高性能,我经常发现需要进行内联扩展,但不幸的是MethodImplOptions.AggressiveInlining仅在.NET 4.5及更高版本中可用。是否有代码片段之类的替代方法?


您似乎经常编写低级的性能关键代码。我认为您的问题是有效的要求。您希望对内联何时发生有更多的控制。实际上,您希望将某个呼叫站点标记为强制进行内联。

不幸的是,从.NET 4.5开始,MethodImplOptions是控制内联的唯一方法。此外,.NET JIT至今仍是一个非常差的优化编译器。您可以期望它执行非常基本的优化,例如保守内联,消除无效代码和不断折叠。但是,它不会给您带来积极的惊喜。

A,我只能给出一个否定的答案。在当前版本的CLR中,您无能为力。

不过,我注意到的是,您似乎将解析的字符一个接一个地追加到某些"缓冲区"中。尝试将它们更大地添加。 CPU喜欢以更大的单位复制内存。记住当前文本跨度的开始位置。结束时,一次性复制该范围内的所有字符(可能使用memcpy)。


尽管我同意,内联扩展通常不是性能优化的(最佳)答案,并且考虑更大的前景通常会带来更大的收益,包括删除有问题的整个方法,有时这就是答案,并且在那种情况下,无论是否为.Net 4.5,您都必须复制并粘贴代码(即,手动进行内联),以确保您能够获得所需的效果,并且在所有平台上都可以运行您的应用程序。这很丑陋,不幸的是,性能优化通常会使代码变丑。

您发现自己的方法看起来像是内联的理想人选。