Tri*_*ock 2 .net c# compiler-construction optimization
在C#(或VB .NET)中,编译器是否尝试优化属性访问?例如,
public ViewClass View
{
get
{
...
Something is computed here
....
}
}
if (View != null)
View.Something = SomethingElse;
我想如果编译器可以某种方式检测到View两次访问之间保持不变,它可以避免计算两次值.是否进行了这些优化?
我知道如果View有一些密集的计算,它可能应该重构为一个函数(GetView()).在我的特定情况下,View涉及攀爬视觉树寻找特定类型的元素.
相关:关于(Microsoft)C#编译器的工作原理的任何参考?
不一般,没有.正如史蒂文所提到的,关于多线程有许多因素需要考虑,如果你真的在计算可能会改变的东西,那么你是正确的,它应该被重构而不是属性.如果它不会改变,你应该延迟加载它(检查私有成员是否为null,如果是,则计算,然后返回值).
如果它不会改变并依赖于参数,则可以使用Dictionary或Hashtable作为缓存 - 给定参数(键),您将存储该值.您可以将每个条目作为WeakReference值的值,因此当值未在任何地方引用并且垃圾收集发生时,将释放内存.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |