大きなファイルを解析する必要があるため、次のようにする代わりに:
string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds
parse(unparsedFile); // takes another 4 seconds
最初の 4 秒を利用して、次のようにして両方のことを同時に実行したいと考えています。
while (true)
{
char[] buffer = new char[1024];
var charsRead = sr.Read(buffer, 0, buffer.Length);
if (charsRead < 1)
break;
if (charsRead != 1024)
{
Console.Write("Here"); // debuger stops here several times why?
}
addChunkToQueue(buffer);
}
int counter
これがデバッガーの画像です: ( 1024バイト未満を読み取った反復を示すために追加しました)
1024文字ではなく643文字が読み取られることに注意してください。次の反復で次のようになります。
残りのバイトが 1024 未満になる最後の反復に到達するまで、常に 1024 バイトを読み取る必要があると思います。
だから私の質問は 、whileループを繰り返しスローするときに、「ランダムな」数の文字を読み取るのはなぜですか?
編集
どのようなストリームを扱っているかわかりません。次のようなプロセスを実行します。
ProcessStartInfo psi = new ProcessStartInfo("someExe.exe")
{
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
};
// execute command and return ouput of command
using (var proc = new Process())
{
proc.StartInfo = psi;
proc.Start();
var output = proc.StandardOutput; // <------------- this is where I get the strem
//if (string.IsNullOrEmpty(output))
//output = proc.StandardError.ReadToEnd();
return output;
}
}