ネタもと:テキストファイルの高速な読み込み(C# と VB.NET の質問掲示板)。あわせて読みたい:速度向上を行うための基本(DHJJ [Hatsune's Journal Japan] blog)。
その中で、ログファイルを読み込む処理を行っているのですが、1つのログファイルで1GB近くになる物もあり、読み込みに時間がかかっています。
現在よりも効率的にファイルの読み込みができれればと思うのですが、何かアドバイスありましたらお願いいたします。
///ファイルを開いて解析
using (StreamReader sr = new StreamReader(fileName, Encoding.GetEncoding("Shift_JIS")))
{
while ((line = sr.ReadLine()) != null)
{
//ログ解析実行
}
}
この質問内容を、「ここに引用したコード(using ブロック)の処理に時間がかかっている。この時間を短縮したい。」と解釈したら、ダメなんだろうか。
何となく、それは違うような気がした。で、「line = sr.ReadLine() に、時間がかかっている」と、解釈した。
ん。。。
1行って、500バイトくらいじゃないの?500バイトを読み込むのに、そんなに時間がかかるの?
「ログ解析実行」は、考えないで、ということだけど、ここをすべてコメントアウトした時間は計ってあるのだろうか?その上で、読み込みに時間がかかっています
、なんだろうか。単純にメッセージを表示するだけの処理とでも置き換えていただいて結構です。
とあるけど、コンソール出力って、とっても遅いよ?
で、1行ずつ処理するつもりらしいけど、1行読み込むのと、1行処理するのと、どっちが遅いのだろう?これを計らないと、読み込みを速くする意味がないんじゃないの?
つうかさぁ。一番最初に読み込みに時間がかかっています
と書いておいて、「sr.ReadLine が遅いと、どうやって判断しましたか?」と尋ねたら遅いと判断したのではありません
って。そりゃ、ないだろ?!
まぁ、あれだね。エンコーダ指定しているから。Shift_JIS から Unicode に変換する処理が、「読み込み処理」に加算されてしまっている。Shift_JIS のまま処理するのが、一つの方法かもしれない。
投稿日時 : 2008年5月30日 22:28