質問: 私は型付きの列を追加してDataTableを定義しました。私は、DataTableが100万〜300万行の範囲にあることを期待しています。 私はMicrosoftのTextFieldParserを使用しています(Peekメソッドを使用して複数の固定幅フォーマットをサポートしているため)、DataTableの行を移入します。 私は、DataTableからの行をミラーリングされたSQLテーブルにコピーする何らかの操作をしたいと思います。 DataTable全体を作成してSqlAdapterとSqlCommandBuilderを使用してSQLテーブルを更新すると、 ここで述べたようにメモリが不足します。 どうすればこれを達成できますか?
回答: 1行にDataTableを使用することはお勧めしません。INSERT用に新しいSqlComandを作成し、すべてのテーブルフィールドをパラメータにしてループ内でこのコマンドを実行するだけです。 しかし、既にDataTableでたくさんのコードを書いているのであれば、それをバッファと見なし、次の回避策があります。 1)あなたがデータ行を読んでいるかぎり、これまでに何回も読み込まれているかを確認する 2)DataTable.Update()を実行すると、すぐに10K行が取得されます。 (このパラメータをbuffer_sizeと呼んで、ハードコーディングを避けるために設定のどこかに置くことができます) 3)次にDataTableのすべてのデータを呼び出します ``` DataTable.Clear(); DataTable.AcceptChanges(); ``` 4)ファイルからデータを読み続ける、繰り返しを繰り返す さらに、ファイルの構造やアプリケーションの目的を知らなくても一般的な提案をするのは難しいです。大規模なデータセットを使用する場合、「メモリ不足」を回避する方法についての質問に答えました。しかし、可能なすべてのオプションを検討して、.NETデータテーブルをデータの中間ストレージとして使用することを避け、SQL Serverが提供するすべての可能な手段、たとえば 1)BULK INSERT - 2)bcpユーティリティ - 3)MS SQL Intergartion Services - これらのコマンドとツールを使用した一括挿入操作は.NETから開始できます。