我们有一个Foo
的静态列表。我试图确保,如果Foo
不存在,请从数据库中获取它。这个操作(DB-Get)昂贵所以我想知道我们如何做到这一点?
例如:
if (list.Any(x => x.Name == Leia))
{
//list of Foo's doesn't have any foo with the name 'Leia'
var foo = db.GetFoo("Leia");
foos.Add(foo);
}
最初,我正在考虑使用Double-checked locking,但我不确定这是否是我应该采取的正确路径..特别是在reading a bit about it以及建议使用之后Lazy<T>
代替..除了我的实例不是这里的问题..它是我担心的实例中的ITEMS。
注意:这里的关键不是关于线程安全的集合(例如像ConcurrentBag / ConcurrentDictionary
等),而是关于减少对DB的调用的更多信息。
情景:
db.GetFoo("Leia");
被称为免责声明:我不确定标题是否正确 - 很高兴听到有关修改标题的建议。