2011-08-13 14 views

答えて

0

それは難しい:

public class RequestService : IDisposable 
     { 
      requestDBEntities db; 
      public RequestService() //Constructor 
      { 
       db = new requestDBEntities(); 
      } 
     public List<RequestStatus> ddlFill() 
      { 
       return (from rs in db.reqStatus select rs).ToList(); 
      } 
      //Some Insert,Update,Delete methods {}... 

     public void Dispose() 
      { 
       db.Dispose(); //<--Dispose requestDBEntities(); 
       GC.SuppressFinalize(this); 
      } 

そして第二のアプローチ:コードビハインド

public class RequestService : IDisposable 
      { 
       requestDBEntities db; 
       public List<RequestStatus> ddlFill() 
       { 
       using (db = new requestDBEntities()) 
        return (from rs in db.reqStatus select rs).ToList(); 
       } 
      //Some Insert,Update,Delete methods {}... 

      public void Dispose() 
       { 
        GC.SuppressFinalize(this); 
       } 

ページ これは最初の(私の)アプローチであります私たちはあなたの正確なデザインの選択肢を知らないので、より良いアプローチであると言うことは不可能です。単純なアプリの観点からは、2つの例が同等(多かれ少なかれ)であるように見えるかもしれませんが、実際はまったく異なる方法で動作します。

ここでの基本的な質問は、dbの寿命は、同封のRequestServiceインスタンスの寿命に匹敵するはずですか?

「はい」の場合は、最初のコード例が役立ちます。リソースは期待どおりに管理されます(dbは、オブジェクトにリソースの廃棄を依頼されると同時に内容を破棄します)。また、2つのライフタイムはほぼ同じになります。dbはコンストラクタで構築され、dbそのRequestServiceオブジェクトが回収可能になるとすぐに回収可能)。

答えは「ノー」である場合には、その後、第二の例は、(ほぼ)物事を行うための方法です - あなたはdbからRequestStatusオブジェクトのコレクションビューを生成するので、あなたは本当に周りのdbを維持する理由がありませんもう長い。スタックの値で十分で余分なクラスメンバーの

public List<RequestStatus> ddlFill() 
{ 
    using (var db = new requestDBEntities()) 
     return (from rs in db.reqStatus select rs).ToList(); 
} 

不要:しかし、これは少し改善するために、私はddlFillメソッド内にdbの範囲を制限する提案することができます。

+0

ありがとう、この情報は私にとって非常に説明的です。 – blackraist

0

2番目の例では、requestDBEntities dbを宣言しています。スタック変数として持つのではなく、クラスレベルで?

あなたのアプローチを比較すると、各呼び出しでrequestDBEntitiesを作成する準備はできていますか?もしあなたが - 第二のアプローチが良い、実際には何も他のあなたが掲載されていない - あなたはまったく処分する必要はありません。しかし、各呼び出しでrequestDBEntitiesをインスタンス化/解放すると、余分な時間がかかります。

+0

ありがとうございました。 – blackraist

関連する問題