1
12
对于
具体的
例如,您可能不想进行代码转换,因为它会更改程序的语义。如果
然而,更普遍的观点是密切相关的。如果您知道闭包变量仅用于其值,那么可以进行许多优化。
旁白:最简单的更复杂的场景是:我们有两个lambda转换为委托;一个存储在短期变量中,在包含对昂贵对象的引用的局部上关闭;一个存储在长期变量中,在引用廉价对象的局部上关闭。昂贵的对象的寿命与长寿命变量一样长,即使它没有被使用。更一般地说,多个闭包可以构造为基于闭上关系的分区;当时我们只基于嵌套对闭包进行分区;相同嵌套级别的闭包是一个闭包。给定的场景是罕见的,并且有明显的解决方法,但是如果它根本没有发生就好了。 我们之所以没有这样做,是因为在我们实施Roslyn的过程中有更重要的优化和特性,我们不想给已经很长的时间表增加风险。 我们可以自信地执行这样的优化,因为在C语言中,很容易知道本地何时使用了别名,因此您可以确定是否在创建闭包后写入了它。 我不知道这些优化是否同时得到了实施;很可能没有。
|