在下面的代码中:
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/