質問: from a in context.luAction select a; // business logic and whatever else } } ``` どちらがより効率的ですか? 1つはDoSomething1()、もう1つはDoSomething2()という2つのメソッドがあり、両方のメソッドにusingステートメントを組み込んでコンテキストを開き、それを使用して何でも実行するとします。基本的に両方のメソッドがコンテキストを作成し、完了したらそれをクリーンアップするため、余分なオーバーヘッドが発生しますか。クラスオブジェクトがインスタンス化されたときに作成され、オブジェクトがスコープ外になったときにクリーンアップされるプライベート属性を1つだけ持つのではなく、
回答: 毎回新しいObjectContextを作成することは、いくらかのオーバーヘッドを伴います。本質的なオーバーヘッドは、グローバルキャッシュから特定のObjectContextに関連付けられたメタデータにメタデータをコピーすることです。 このオーバーヘッドは比較的小さいので、特に使用パターンに内在する特別な安全性を考えるときには、特に心配する価値はありません。 私にとってどちらのオプションを選択するかは、次のようなものによって異なります。 1. あなたのラッピングクラスはどのくらい長持ちしますか?長期間存続する場合は、ObjectContextが大きくなり、時間の経過とともに減速する多数のエンティティを保持する可能性があります。そのため、毎回新しいObjectContextを使用することをお勧めします。 2. ラッピングクラスのメソッド呼び出しは同期されていますか? ObjectContextクラス自体はスレッドセーフではないため、2番目のパターンを使用する場合は、複数のスレッドで呼び出すことを想定している場合は、ラッピングクラス/リポジトリがスレッドセーフであることを確認する必要があります。 3. メソッドは本質的に無関係ですか?もしそうであれば、それらがメソッド間で1つのコンテキストを共有する場合、あなたは予期しない副作用を受けるかもしれません。 一般的に私のお勧めは、メソッドがステートレスであれば、つまり各メソッドの新しいコンテキストを起動して忘れることはおそらく良い考えです。 ただし、比較的短期間のステートフルフォームなどを使用している場合は、共有コンテキストを使用することをお勧めします。 更新:私はもっと完全な答えをまとめるのに時間をかけました