【发布时间】:2011-07-19 07:11:15
【问题描述】:
我们经常被告知,
如果您正在调用返回值不变的方法,请将其移出循环。
例如在编写如下代码时:
for(int i=0; i < Instance.ExpensiveNonChangingMethod(); i++)
{
// Stuff
}
我想知道你是否可以告诉编译器给定相同的输入(和对象实例)你会得到相同的输出,所以它会知道它可以将它移出循环作为优化过程的一部分。
这样的事情存在吗?也许像code-contracts 或spec# 之类的?或者他们已经可以做这种事情了?
是否可以想象编译器可以推断出方法是pure function its-self?
我可以在 C# 中使用什么东西来使编译器能够执行更多优化吗? 是的,我知道过早的优化。我主要是出于好奇而询问,但如果确实存在上述类似的东西,一旦标记了方法,它将是“免费”的。
【问题讨论】:
-
顺便说一句;目前的答案是“你;你是做这件事的工具”——不是贬义的意思,他很快补充道。
-
您可能会根据手动
[Pure]注释制作一个重写器,将这样的事情从循环中解救出来。
标签: code-contracts spec# c# .net code-contracts compiler-optimization spec#