gpt4 book ai didi

C# 属性访问优化

转载 作者:行者123 更新时间:2023-11-30 19:49:50 27 4
gpt4 key购买 nike

在 C#(或 VB .NET)中,编译器是否尝试优化属性访问?例如,


public ViewClass View
{
get
{
...
Something is computed here
....
}
}

if (View != null)
View.Something = SomethingElse;

我想,如果编译器能够以某种方式检测到 View 在两次访问之间保持不变,它就可以避免两次计算该值。是否执行了这些类型的优化?

我知道如果 View 有一些密集的计算,它可能应该被重构为一个函数 (GetView())。在我的特殊情况下,View 涉及爬升可视化树以查找特定类型的元素。

相关:关于 (Microsoft) C# 编译器工作原理的任何引用资料?

最佳答案

一般不会,不会。正如 Steven 所提到的,关于多线程有很多因素需要考虑,如果你真的在计算可能会改变的东西,你是对的,它应该从一个属性中重构出来。如果它不会改变,你应该延迟加载它(检查私有(private)成员是否为 null,如果是则计算,然后返回值)。

如果它不会改变并且取决于参数,您可以使用DictionaryHashtable 作为缓存 - 给定参数(键),您将存储值(value)。您也可以将每个条目作为该值的 WeakReference,这样当该值未在任何地方被引用并且发生垃圾收集时,内存将被释放。

希望对您有所帮助。

关于C# 属性访问优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com