それぞれ150MBのサイズの複数の .txt ファイルがあります。C# を使用して、各ファイルから文字列パターンを含むすべての行を取得し、それらの行を新しく作成したファイルに書き込む必要があります。
私はすでに同様の質問を調べましたが、提案された回答のいずれも、結果を取得する最速の方法を提供できませんでした. 正規表現、linq query、contains メソッド、バイト配列での検索を試しましたが、ファイルの内容を読み取って比較するのに 30 分以上かかっています。
私のテスト ファイルには特定の形式はありません。区切り文字に基づいて分割したり、DataViews に基づいてフィルター処理したりできない生データのようなものです。以下は、そのファイルの各行のサンプル形式です。
サンプル.txt
LTYY;;0,0,;123456789;;;;;;;20121002 02:00;;
ptgh;;0,0,;123456789;;;;;;;20121002 02:00;;
HYTF;;0,0,;846234863;;;;;;;20121002 02:00;;
Multiple records......
マイコード
using (StreamWriter SW = new StreamWriter(newFile))
{
using(StreamReader sr = new StreamReader(sourceFilePath))
{
while (sr.Peek() >= 0)
{
if (sr.ReadLine().Contains(stringToSearch))
SW.WriteLine(sr.ReadLine().ToString());
}
}
}
Sample.txt から123456789を検索するのに 1 分もかからないサンプル コードが必要です。私の要件が明確でない場合はお知らせください。前もって感謝します!
編集
根本的な原因は、ファイルがリモート サーバーに存在するため、ファイルの読み取りに時間がかかることであることがわかりました。これは、ファイルをローカル マシンにコピーしたときに、すべての比較方法が非常に迅速に完了したため、読み取り方法には問題がないためです。またはコンテンツを比較すると、多かれ少なかれ同じ時間がかかりました。
しかし、この問題にどのように対処すればよいでしょうか。これらのファイルをすべて比較のために自分のマシンにコピーできず、OutOfMemory 例外が発生します。