【发布时间】:2017-03-31 21:59:15
【问题描述】:
考虑以下代码:
public static void M() {
A(V);
A(V);
A(V);
}
public static void V() {
}
public static void A(Action x) {
x();
}
这在幕后编译为:
public static void M() {
A(new Action(V));
A(new Action(V));
A(new Action(V));
}
但是,我们可以编写自己的简单性能改进来减少不必要的垃圾:
private static readonly Action v = new Action(V);
A(v);
A(v);
A(v);
对于这个非常简单的案例,Roslyn 是否有任何理由无法进行类似的优化?
如果答案是否定的,那么当方法不是静态的而是实例成员时呢?那么当捕获到封闭变量时呢?
【问题讨论】:
-
这是字面上静态成员和实例成员之间的根本区别。你到底在问什么?为什么 Roslyn 从一开始就没有完全抛弃该语言的行为?
-
@DavidL - 你能进一步解释一下吗?
-
@Enigmativity 很高兴尝试一下;请看下文。
-
我相信这很可能会出现在 C# 8 中:github.com/dotnet/roslyn/pull/6642
标签: c# optimization roslyn