|
分類:[VB.NET/VB2005 以降]
VB2005,WindowsXP SP3(クライアント)、Oracle 11g R1+Windows Server 2003(DBサーバ)で開発しています。テストファイルから10万行か100万行(1レコード400byte) のレコードを読み取り、他のテーブルを参照したり1レコードから子レコードを生成してOracleへ反映しています。ところがこのプログラムを実行するとどんどんメモリを食い、1GBくらい使ってOutOfMemory例外で落ちてしまいます(クライアント環境:メモリ3G搭載)。また、ハードのスペックが高いサーバ上で実行すると落ちなくなりましたが、タスクマネージャでプロセスを見ていると1.5GBまで使っています。取り込んだデータは最初dataTableに溜め込みUpdateしていましたが、ガーベージを行ってもメモリ使用量が減らないので、1行読み込んだら反映すべきデータをコマンドオブジェクト(ADO.NET)を使ってテーブルを更新してもメモリ消費量はほぼ変わりませんでした。こういった大量デーを処理する際、メモリを極力使わないようにして、かつ処理速度もあまりに遅くならないように処理する方法は無いでしょうか。
|