2017-07-12 5 views
0

私はいくつかのメソッドを底に持っています。私は何度もこのメソッドを呼び出すが、さらに私はSession.Prefetch<OpParamDef>()を一度呼び出す必要がある。私は何をしなければならないのですか?これに特別なコマンドはありますか?初めてPrefetchを呼び出したいと思います。メソッド内の1つのプリフェッチ

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

これはメソッドではありません。プロパティ宣言であり、無効なものです。このように無効なコードを指定すると、あなたを助けることが非常に難しくなります。 「一回だけ」と言うときは、「アプリケーションの全ライフタイムで一度だけ」を意味するのか、「インスタンスのために一度だけ」を意味するのでしょうか?どうか明らかにしてください。 –

+0

私は毎回最適化とプリフェッチ呼び出しを行っているため、アプリケーションの全ライフタイムで1回だけです。 –

+1

その場合は、おそらく静的コンストラクタで十分でしょう。 –

答えて

1

遅延ロードされたコレクションの格納には、Lazy<T>を使用できます。 、あなたがCollection.Value複数回アクセスすることができ

Lazy<List<OpParamDef>> Collection { get; set; } 
//...in your ctor 
Collection = new Lazy<List<OpParamDef>>(() => Session.Prefetch<OpParamDef>()); 

しかしSession.Prefetch<OpParamDef>()は、最初の呼び出しでのみ使用され、その初期化子の結果は次のようになります。ドキュメントには、あなたの質問に基づいて、使用例があるかもしれないhere

ですキャッシュされます。

public List<OpParamDef> CollectionAsList 
{ 
    get 
    { 
     return Collection.Value; 
    } 
} 

これは値が使用されていない場合は、すべての初期化機能を搭載しないという利点があります。

は、あなたも、プロパティの背後にValueアクセサを隠すことができます。

これに加えて、このアプローチを任意のコンテキストで柔軟に使用することができます。 (アプリケーションレベル、要求コンテキストなど)

+0

これはいい考えですか? [ペーストビン] https://pastebin.com/eTUm8b8y –

+0

@RobertDaraż 'Lazy 'の機能を複製しているようです。私は上記の解決法( 'Lazy 'を使用)がどのように働いているのかを調査し、それを検討する。 – Oliver

関連する問題