我在底部有一些方法。我想多次調用這個方法,但另外我只想調用Session.Prefetch<OpParamDef>()
一次。我需要做什麼?有沒有特別的命令?我想第一次調用Prefetch
。方法中的一個預取
public void method
{
get
{
Session.Prefetch<OpParamDef>();
var result = new List<OpParamDef>();
}
}
我在底部有一些方法。我想多次調用這個方法,但另外我只想調用Session.Prefetch<OpParamDef>()
一次。我需要做什麼?有沒有特別的命令?我想第一次調用Prefetch
。方法中的一個預取
public void method
{
get
{
Session.Prefetch<OpParamDef>();
var result = new List<OpParamDef>();
}
}
你可以看看使用Lazy<T>
來存儲延遲加載的集合。該文檔是here
根據您的問題可能是一個例子用法:
Lazy<List<OpParamDef>> Collection { get; set; }
//...in your ctor
Collection = new Lazy<List<OpParamDef>>(() => Session.Prefetch<OpParamDef>());
您可以訪問Collection.Value
多次,但Session.Prefetch<OpParamDef>()
將只在第一次調用中使用,即初始化的結果是再緩存。
你甚至可以隱藏屬性背後的Value
訪問:
public List<OpParamDef> CollectionAsList
{
get
{
return Collection.Value;
}
}
這絲毫不是加載初始化函數如果不使用值的好處。
除此之外,您可以靈活地在任何情況下使用此方法。 (應用程序級別,請求上下文等)
這是個好主意? [Pastebin] https://pastebin.com/eTUm8b8y –
@RobertDaraż看起來您正在複製'Lazy
這不是一種方法 - 它是一個屬性聲明,除非它是無效的。提供這樣的無效代碼使得很難幫助你。當你說「只有一次」時,你的意思是「在應用程序的整個生命週期中只有一次」或「只爲實例一次」或其他的東西?請澄清。 –
只需在應用程序的整個生命週期中進行一次,因爲我每次都在進行優化和預取調用。 –
在這種情況下,靜態構造函數可能就足夠了。 –