Rez*_*eni 4 c# expression-trees
我知道表达式树是不可变的,那么为什么编译器不对静态表达式使用相同的对象引用,比如字符串文字呢?
要澄清问题,请参阅示例:
static void Main(string[] args)
{
Test(p => true);//2637164
Test(p => true);//3888474
Test("true");//-292522067
Test("true");//-292522067
Console.ReadKey();
}
public static void Test(Expression<Func<string,bool>> exp)
{
Console.WriteLine(exp.GetHashCode());
}
public static void Test(string str)
{
Console.WriteLine(str.GetHashCode());
}
Run Code Online (Sandbox Code Playgroud)
我知道表达式树是不可变的,那么为什么编译器不对静态表达式使用相同的对象引用,比如字符串文字呢?
规范说允许编译器但不需要实习相同的lambdas.
字符串文字由运行时免费实现; 编译器开发人员无需花费任何成本.
我没有实习表达树的原因是因为每天我们花费无意义的不必要的"优化"来实现不切实际的场景,实际上不会消耗宝贵的资源,这是Visual Studio可能会减少其日程安排的一天.我们花了那么多时间进行实际优化.
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |