Die StreamReader-Lesemethode liest nicht die Anzahl der angegebenen Zeichen
Ich muss eine große Datei analysieren, anstatt Folgendes zu tun:
string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds
parse(unparsedFile); // takes another 4 seconds
Ich möchte die ersten 4 Sekunden nutzen und versuchen, beide Dinge gleichzeitig zu tun, indem ich etwas mache wie:
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);
}
Hier ist das Bild des Debuggers: (Ich fügte hinzuint counter
um zu zeigen, auf welcher Iteration wir weniger als 1024 Bytes lesen)
Beachten Sie, dass dort 643 Zeichen und nicht 1024 Zeichen stehen. Bei der nächsten Iteration erhalte ich:
Ich denke, ich sollte die ganze Zeit 1024 Bytes lesen, bis ich zur letzten Iteration komme, in der die verbleibenden Bytes weniger als 1024 sind.
Also meine Frage ist warum lese ich "zufällige" Anzahl von Zeichen, wenn ich die while-Schleife durchlaufe?
BearbeitenIch weiß nicht, mit welcher Art von Stream ich es zu tun habe. Ich führe einen Prozess aus wie:
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;
}
}