c# - Property Getter中的缓存密集型计算

标签 c#

在下面的代码中:

public class SomeClass
{
    // ... constructor and other stuff

    public in SomeProperty
    {
        get
        {
            return SomeHeavyCalculation();
        }
    } 
}

我认为该类是不可变的,因此每次访问 SomeProperty 时,都应返回相同的值。我的问题是是否可以避免每次都计算该值。是否有一些内置机制来缓存此类内容?

最佳答案

是的 - Lazy<T> ,假设您使用的是 .NET 4:

public class SomeClass
{
    private readonly Lazy<Foo> foo = new Lazy<Foo>(SomeHeayCalculation);
    // ... constructor and other stuff

    public Foo SomeProperty
    {
        get
        {
            return foo.Value;
        }
    } 
}

我假设您试图避免在从未访问该属性的情况下执行计算。否则,只需在构建时预先执行即可。

请注意,属性通常被认为是“廉价”的评估 - 虽然您正在使它变得懒惰以便以后访问便宜,但它仍然可能足够“繁重”在第一次访问时使属性不合适。考虑一个 ComputeXyz方法代替。

关于c# - Property Getter中的缓存密集型计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898854/

相关文章:

c# - WPF Storyboard动画不起作用

c# - WaveOut 将波形文件播放到设备的特定 channel

C# - 从文件夹中播放随机声音文件

C# 分配/强制转换为结构中的对象字段

c# - 从其 http 请求中获取有关用户的信息

c# - 将 DataTable 绑定(bind)到 GridView 的模板字段

c# - 元数据 View 必须是具有无参数或字典构造函数的具体类

javascript - 下载 c# excel 字节数组并将其转换为 javascript blob

c# - 为什么 Task 对象不使用传递给它的参数?

c# - 如何将指针从 C# 传递到非托管 DLL?