同様に機能する機能を作成したいと思いますSqlDataReader.Read()
.txt/.csv からフラット ファイルを読み取り、ビジネス ロジックを処理するクラスにデータ テーブルとして返します。これはデータテーブルの行を反復処理し、データを変換して構造化データベースに書き込みます。この構造を複数のインポート ソースに使用します。
ただし、大きなファイルは、非常にゆっくりと動作します。30 MB のデータを処理するのに 2 時間かかっていますが、これを 30 分に短縮したいと考えています。この方向への 1 つのステップは、ファイル全体を DataTable に読み込むのではなく、1 行ずつ処理し、メモリがログに記録されないようにすることです。
次のようなものが理想的です: PSEUDOCODE。
FlatFileReader ffr = new FlatFileReader(); //Set FlatFileParameters
while(ffr.ReadRow(out DataTable parsedFlatFileRow))
{
//...Business Logic for handling the parsedFlatFileRow
}
のように機能するメソッドを実装するにはどうすればよい.ReadRow(out DataTable parsedFlatFileRow)
ですか?
これは正しい方向ですか?
foreach(obj in ff.lazyreading()){
//Business Logic
}
...
class FlatFileWrapper{
public IEnumerable<obj> lazyreading(){
while(FileReader.ReadLine()){
yield return parsedFileLine;
}
}
}