我正在訪問數據庫以批量填充字段。數據訪問的惰性初始化
PopulateAobjs();
PopulateBobjs();
PopulateCobjs();
...
一旦填充值,我將實體存儲在Dictionary<Id, Entity>
中。
我想使這個過程很懶,以這種方式,如果我不需要C
對象,那麼我不需要調用該方法。等等。
這怎麼辦?
LazyInit <>?
我正在訪問數據庫以批量填充字段。數據訪問的惰性初始化
PopulateAobjs();
PopulateBobjs();
PopulateCobjs();
...
一旦填充值,我將實體存儲在Dictionary<Id, Entity>
中。
我想使這個過程很懶,以這種方式,如果我不需要C
對象,那麼我不需要調用該方法。等等。
這怎麼辦?
LazyInit <>?
而不是做這樣的初始化例程,你寧願使用延遲加載屬性這樣的事情。
private Lazy<IEnumerable<CObject>> cObjects = new Lazy<IEnumerable<CObject>>(LoadCObjects);
public IEnumerable<CObject> CObjects
{
get { return this.cObjects.Value; }
}
CObjects
然後將在任何人第一次訪問屬性時加載。
編輯:當你在.NET 4.0中卻沒有,Lazy<T>
僅僅是像一個奇特的方式:
private IEnumerable<CObject> cObjects;
public IEnumerable<CObject> CObjects
{
get
{
if (this.cObjects == null)
lock (this.someLockObject)
if (this.cObjects == null)
this.cObjects = this.LoadCObjects();
return this.cObjects;
}
}
只有我不在.net 4.所以我應該看看LazyInit <>? – DarthVader 2010-10-08 21:25:47
更新了答案。你也可以使用'LazyInit <>',它應該和'Lazy <>'類似。 – herzmeister 2010-10-08 21:37:00
爲了做到這一點,我通常有加載集合中的屬性的代碼得到方法。根據類,它將直接加載數據或請求全局緩存加載數據。
Property FooCustomers
Get
If _Customers IS NULL THEN Then _Customers = CustomerCache.FindByKey(companyKeys)
Return _Customers
你怎麼知道你是否需要「C」對象?什麼使用「C」對象? – codeConcussion 2010-10-08 21:16:08
我在方法中使用A和B對象,但我沒有使用C對象。 – DarthVader 2010-10-08 21:25:05