【发布时间】:2011-07-05 07:43:36
【问题描述】:
在 .NET 4 中,也可以使用 System.Lazy<T> 类编写以下带有缓存属性的 sn-p。我测量了这两种方法的性能,结果几乎相同。为什么我应该使用一个而不是另一个有什么真正的好处或魔法?
缓存属性
public static class Brushes
{
private static LinearGradientBrush _myBrush;
public static LinearGradientBrush MyBrush
{
get
{
if (_myBrush == null)
{
var linearGradientBrush = new LinearGradientBrush { ...};
linearGradientBrush.GradientStops.Add( ... );
linearGradientBrush.GradientStops.Add( ... );
_myBrush = linearGradientBrush;
}
return _myBrush;
}
}
}
懒惰
public static class Brushes
{
private static readonly Lazy<LinearGradientBrush> _myBrush =
new Lazy<LinearGradientBrush>(() =>
{
var linearGradientBrush = new LinearGradientBrush { ...};
linearGradientBrush.GradientStops.Add( ... );
linearGradientBrush.GradientStops.Add( ... );
return linearGradientBrush;
}
);
public static LinearGradientBrush MyBrush
{
get { return _myBrush.Value; }
}
}
【问题讨论】:
-
通过使用
Lazy<T>,您将成为Lazy来编写自己的实现。 (当然,这是一种很好的方式。) -
有趣,我倾向于说它的代码更少且更具可读性,但您的示例表明情况并非如此。但话又说回来,我已经有一个
Property<T>类用于支持这种和更常见的支持字段行为的支持字段。 -
Lazy
允许线程安全
标签: c# .net .net-4.0 lazy-loading