質問: 私は数百万のレコードを持つMSSQL 2008テーブルを持っています。各行を繰り返し処理し、データの一部を変更し、更新されたレコードを毎日実行されるC#アプリケーションを使用して新しいテーブルにコピーする必要があります。 私はADO.NETエンティティを使用してこれを試みましたが、このメソッドに関連するメモリの問題がありますが、それは非常に遅いというわけではありません。あるテーブルを別のテーブルにコピーするためのバルク・コピー・ライブラリとSQL専用の方法については読んでいますが、コピーする前にレコードを変更することはありません。私はこの操作を実行するためのより良い方法を見つける必要があります。
回答: メモリの問題について言及しておきますが、100万行をメモリにロードして処理し、データベースに書き戻そうとしていると思います。データを完全にロードするのではなく、「ストリーミング」することで、これを回避できます。 `SqlDataReader`はバッファリングを処理します。読み込み側では、行を1つずつフェッチする単純な`WHILE`ループを実行できます。実際に作業している実際の変換は、結果をデータベースに書き戻すだけです。 IMHOの最速の方法は、データテーブル内で複数の結果のバッファを格納し(100で始まり、スイートスポットがどこにあるかを確認してから)、そのデータテーブルを`SqlBulkCopy`クラスを使用してデータベースにプッシュすることです。リンス&リピート。 PS:「楽しい」問題のように聞こえる。これをテストするためのサンプルデータがありますか?最初は些細なことに5時間は長い時間のように聞こえますが、それでも2000万回、事実上何も追加されません。具体的には、データがRTF側にどのように「大きく」あるのだろうか。平均値は約2kか、むしろ200kですか?そして、あなたはこれをどのようなハードウェアで動かしていますか?