2012-04-01 8 views
0

私は.NET 3.5プロジェクトで作業しており、複数のDataTableを持つDataSetとDataTables間の関係を使用します。私は、DataTableを埋めるためにSQLから一定量のレコードを取得し、それらのレコードを処理します。レコードの処理が終了したら、DataSetをクリアして次のレコードセットを取得します。私は、Clear()メソッドがメモリから行をクリアしないことを読んでいます。レコードを取得している間にメモリが増加し続けることなく、DataSetを再利用するにはどうすればよいですか?メモリの問題なしで同じデータセットを再利用

+0

選択基準を変更して、もう一度Fillを呼び出します。テーブルやリレーションシップが変更された場合は、データセットを使いこなすだけで済みます。新しいデータセットを作成し、それを処理関数に渡すだけです。 –

+0

ここで私の心配は記憶についてです。このプロセスは、何時間も実行されている何千ものレコードに作用します。私はメモリが正しく管理されていることを確認する必要があります。 – user31673

+0

しかし、いったんDataRowが参照されなくなると、GCはそれを取り除くべきです.ClearまたはFillはそれを行います。私の早すぎる最適化のように見えますが、あなたの心配が正当化されているかどうかを確認してください。 –

答えて

1

MSDNにはthe DataSet.Clear method clears the DataSet of any data by removing all rows in all tables.と記載されています。それはすべてのテーブルと関係をそのまま残しますが、すべての行をクリアします。

どこを読んだのですか?

+0

Microsoftの従業員からの応答を次のリンクで読むと、http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/41e1b19a-b5ee-4cf2-ac1e-ff0c9a35b961が表示されます。次のように記述します。DataSet.Clear()およびDataSet.Dispose()は、GCによって行を消去しません。 .Clear()メソッドは、データセット内のすべてのデータテーブル内のすべてのデータ行を削除します。また、.Dispose()メソッドは、DataSet MarshalByValueComonentの基本クラスによって実装されるため、データセットの管理対象リソースを解放しません。 – user31673

+0

これは、行がクリアされていること、メタデータ(テーブル関係などはありません)が良いことを示しています。メタデータがそれぞれ異なる場合は、nullを指定するか、新しいメタデータに割り当てます。 –

関連する問題