2017-07-12 16 views
0

我在底部有一些方法。我想多次調用這個方法,但另外我只想調用Session.Prefetch<OpParamDef>()一次。我需要做什麼?有沒有特別的命令?我想第一次調用Prefetch方法中的一個預取

public void method 
{ 
    get 
    { 
     Session.Prefetch<OpParamDef>();    
     var result = new List<OpParamDef>(); 
    } 
} 
+0

這不是一種方法 - 它是一個屬性聲明,除非它是無效的。提供這樣的無效代碼使得很難幫助你。當你說「只有一次」時,你的意思是「在應用程序的整個生命週期中只有一次」或「只爲實例一次」或其他的東西?請澄清。 –

+0

只需在應用程序的整個生命週期中進行一次,因爲我每次都在進行優化和預取調用。 –

+1

在這種情況下,靜態構造函數可能就足夠了。 –

回答

1

你可以看看使用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; 
    } 
} 

這絲毫不是加載初始化函數如果不使用值的好處。

除此之外,您可以靈活地在任何情況下使用此方法。 (應用程序級別,請求上下文等)

+0

這是個好主意? [Pastebin] https://pastebin.com/eTUm8b8y –

+0

@RobertDaraż看起來您正在複製'Lazy '的功能。我會研究上述解決方案(使用'懶惰')如何工作並考慮使用該解決方案。 – Oliver

相關問題