我必须解析一个大文件,而不是这样做:
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 字节的迭代)
请注意,那里读取了 643 个字符而不是 1024。在下一次迭代中,我得到:
我认为我应该一直读取 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;
}
}