2011-08-09 4 views
2

Windowsフォームアプリケーションのデータセットに関する質問があります。データセットはwinformsアプリケーション内のメモリにどのくらい保持されますか

パート1:

質問:

1)は、データベースにそれがインスタンス化されるたびにヒットデータセットです。

パート2:

仮定:

  • 私の最初の質問への答えは、私が働いているデータセットは、比較的少量のデータを持っていることを
  • 、およびアプリケーション自体真であります多数の同時ユーザーはいません。
  • フォームの数はかなり多いかもしれませんが、同じデータセットを必要とします。

質問:

1)それがメモリ内のデータセットの静的なバージョンを格納するための悪い考えです。

オプション(これらの可能な解決策を評価):

オプション1:データセットのコンテナとして作用する静的クラスを作成します。

オプション2:データセットに必要な場所にデータセットを作成し、そのデータセットに依存する後続のフォームのプロパティを作成し、そのデータセットへの参照をその特定のフォームに渡して、GCがメモリを再割り当てしないようにします。 (そしてデータベース呼び出しの数を減らす)。

擬似コード:これは、データセットをインスタンス化する親フォームです。

public partial class ParentForm: Form 
{ 
    private DataSet dataset; 

    public ParentForm() 
    { 
    //logic that populates dataset 
    } 

    Button_Click(object sender, EventArgs e) 
    { 
     DependentOnDataSetForm dependent = new DependentOnDataSetForm(dataset); 
    } 
} 

擬似コード:これは、同じデータセットに依存するフォームです。

public partial class DependentOnDataSetForm : Form 
{ 
    private DataSet dataset; 

    public DependentOnDataSetForm (DataSet dataset) 
    { 
     this.dataset = dataset; 
    } 

    // Another from that depends on the same dataset. 
    Button_Click(object sender, EventArgs e) 
    { 
     DependentOnDataSetForm2 dependent = new DependentOnDataSetForm2(dataset); 
    } 
} 

ボーナス質問:(私の現在の状況には当てはまりませんが、将来の参考のために知っておくとよい)。

特定のフォームで必要とされる特定のデータのみを担当する複数のDataSet.xsdファイルを作成することをお勧めしますか。たとえば、(まったく仮説的):注文を満たす責任がある注文サービスがあるとします。この特定のサービスは注文テーブル、顧客テーブル、出荷テーブルなどにアクセスする必要があります。したがって、格納されている.xsdファイル必要なテーブルは良いアイデアですか?

+0

別個の質問を作成してください。さもなければあなたの質問はコミュニティにとって有用ではありません。なぜなら、それは検索することが難しくなるからです。 –

答えて

0

質問#1の答えはいいえです。 DataSetオブジェクトは、ADO.NETの切断オブジェクトと見なされます。したがって、データベースにヒットしません。ADO Connectedオブジェクト(DataAdapterなど)の結果を使用してDataSetをインスタンス化できますが、DataSet自体はデータベースに接続しません。

私はオプション2を選択しますが、参照オブジェクトであることに注意してください.1つの形式の変更は別の形式に影響する可能性があります。

0
  1. データセットは、テーブルまたはデータアダプタでFill()を使用してデータを取り込むときにのみDBにヒットします。
  2. データキャッシュの1つのインスタンス(DataSetが実際に存在する)を保存する価値があります。もちろん、あなたがアップデートで特別な注意を払う気にならないならば。データセットはGUIデータバインディングによく使用されます。このデータセットに何らかの変更が生じた場合でも、UIスレッドで発生する必要があります。
0

データセットの処理が完了したら、いつでもDispose()メソッドを呼び出すことができます。その後、再度使用する場合は、そのインスタンスをインスタンス化することができます。

関連する問題