質問

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のステートメント、終了できます   列挙が時期尚早です。もしあなたの   アプリケーションで問題が発生する   接続が閉じていないとあなた   自動終了動作が疑われる   動作していません   回避策としてのパターン。
  •   

ソース

から
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top