c#中的闭包会导致生成的il中的代码膨胀吗?我被告知要避免使用闭包变量的lambdas,因为它们在目标文件中生成隐藏类,可以存储lambda的上下文.每个具有闭合变量的lambda的类.这是真的?或者编译器是否重用现有的类,如Tuple或一些内部类?
Jon*_*eet 16
额外的类只有在需要时才会生成 - 当您捕获除以外的变量时this
.但是,在大多数情况下,这并不是真正的代码膨胀 - 为了使委托以您需要的方式工作,这是必要的.
在某些情况下,您可以自己编写更高效的代码,但通常为了获得具有相同效果的委托,您最终会编写与编译器为您生成的代码类似的代码......但是相当难以阅读.
大多数时候你不应该担心这种"臃肿" - 避免微观优化性能开始 - 优化可读性,测量性能而不是猜测它.然后你就可以攻击那些真正重要的代码,当你证明它值得的时候,可能会牺牲一些可读性来获得性能.
(编写现代C#并故意避免使用lambda表达式就像尝试用一只手绑在背后编码.如果提示你的人担心关闭的"膨胀",你可能会通过向他展示状态给他心脏病发作在C#5中为异步/等待生成的机器...)
归档时间: |
|
查看次数: |
1533 次 |
最近记录: |