【发布时间】:2011-11-23 17:54:50
【问题描述】:
编译器/运行时能否重新排序或内联表达式树?
如果我得到以下代码:
public static int SomeSimpleMethod(int x) {
return x;
}
void Main() {
Expression<Func<bool>> expr = () => SomeSimpleMethod(2) == 3;
}
expr 可以包含其他内容(在伪代码中)
Expression.Lambda
Expression.Equals
Expression.Call
Expression.Constant
Expression.Constant
编辑
我只是在解析表达式树以查找一些项目,例如方法调用的名称(“SomeSimpleMethod”)。 lambda 将永远不会被执行,所以我只想确保方法调用不会远离表达式树进行优化。
【问题讨论】:
-
如何优化?尺寸?速度?屠宰的鸡数量?
-
@RitchMelton:虽然一般来说这是一件有道理的事情,但不合格的“优化”意味着“速度”是相当普遍的。
-
@Ritch Melton: number of toenails cut
-
@delnan - 我不同意你的说法。当被问到 SO 时,它通常意味着“我如何用更少的代码(由我输入)来做到这一点”
-
我一方面怀疑即使是最被误导的速度追求者,另一方面,即使是最不成熟的 Knuth 引用者,也不会不同意,如果编译器生成的代码在运行时内存中更小,但对速度没有任何影响,它仍然可以算作优化。也就是说,我认为对于 any 优化来说,这个问题是公平的。 OP 想知道编译器在获得他们描述的输入时会做什么,一个好的答案就是告诉他们。
标签: c# optimization lambda