.NET 3.5及更低版本中内联的替代方法

时间:2014-05-24 12:28:05

标签: c# .net inline

为了提高性能,我经常发现内联扩展的需要,遗憾的是,MethodImplOptions.AggressiveInlining仅在.NET 4.5及更高版本中可用。是否有其他替代方案,例如代码段?

2 个答案:

答案 0 :(得分:2)

看起来您经常编写低级别的性能关键代码。我发现你的问题是有效的要求。您希望更好地控制内联发生的时间。实际上,您希望将某个呼叫站点标记为强制进行内联。

不幸的是,从.NET 4.5开始MethodImplOptions是控制内联的唯一方法。此外,.NET JIT从今天开始是一个非常糟糕的优化编译器。您可以期望它执行非常基本的优化,例如保守内联,死代码消除和常量折叠。不过,这并不会让你感到惊讶。

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


但是,我注意到,您似乎将解析后的字符逐个附加到某些"缓冲区"。尝试将它们添加到更大的块中。 CPU就像在较大单元中复制内存一样。记住当前文本范围开始的位置。当它结束时,一次性复制该跨度中的所有字符(可能使用memcpy)。

答案 1 :(得分:0)

虽然我同意通常内联扩展不是性能优化的(最佳)答案,并且考虑更大的图景通常可以产生更大的收益,包括删除所讨论的整个方法,有时它就是答案,并且在这种情况下,无论是否.Net 4.5,你必须复制并粘贴代码,即手工内联,绝对确定你得到你想要的效果,并在所有平台上应用程序正在运行。这很丑陋,不幸的是,性能优化通常会让代码变得丑陋。

正如你自己discovered使用的方法看起来非常适合内联。