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?

Bearbeiten

Ich 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;
        }
    }

Antworten auf die Frage(3)

Ihre Antwort auf die Frage