C#Linq-to-Sql-IDisposableを使用してDataContextを破棄する必要があります
-
03-07-2019 - |
質問
DBを処理するいくつかのメソッドがあり、それらはすべて呼び出しによって開始されます
FaierDbDataContext db = new FaierDbDataContext();
Linq2Sql DataContextオブジェクトはIDisposableを実装しているため、これを" using"と併用する必要がありますか?
using (FaierDbDataContext db = new FaierDbDataContext()) {
// use db here
}
何らかの方法で使用することの意味は何ですか?
解決
から実装するほとんどのタイプとは異なり IDisposable、DataContextはしません 本当に処分が必要-少なくともそうではない ほとんどの場合。マット・ウォーレンに聞いた この設計決定について、そしてここに 彼の応答でした:
実装した理由はいくつかあります IDisposable:
- アプリケーションロジックがエンティティを保持する必要がある場合、 DataContextが使用されるか、または あなたがその契約を執行できる有効な Disposeを呼び出します。遅延ローダー そのエンティティはまだ参照しています DataContextを使用します コードがナビゲートしようとする場合 遅延プロパティ。これらの試み 失敗します。廃棄も強制的に キャッシュをダンプするDataContext 実体化されたエンティティ キャッシュされたエンティティは誤って 実体化されたすべてのエンティティをキープアライブ そのDataContextを介して、 それ以外の場合は、 メモリーリーク。
- DataContext接続を自動的に閉じるロジックは 接続を離れるようにだまされた 開いた。 DataContextは すべてを列挙するアプリケーションコード に到達してからのクエリの結果 結果セットの終わりが 接続を閉じます。もし アプリケーションはIEnumerableを使用します foreachの代わりにMoveNextメソッド C#またはVBのステートメント、終了できます 列挙が時期尚早です。もしあなたの アプリケーションで問題が発生する 接続が閉じていないとあなた 自動終了動作が疑われる 動作していません 回避策としてのパターン。
所属していません StackOverflow