Metoda ReadReader Read nie odczytuje liczby określonych znaków
Muszę przeanalizować duży plik, więc zamiast:
string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds
parse(unparsedFile); // takes another 4 seconds
Chcę skorzystać z pierwszych 4 sekund i spróbować zrobić obie rzeczy jednocześnie, wykonując coś w stylu:
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);
}
Oto obraz debugera: (dodałemint counter
aby pokazać na jakiej iteracji czytamy mniej niż 1024 bajty)
Zauważ, że tam 643 znaki czytają, a nie 1024. W następnej iteracji otrzymuję:
Myślę, że powinienem odczytywać 1024 bajty przez cały czas, aż dojdę do ostatniej iteracji, gdzie pozostałe bajty są mniejsze niż 1024.
Więc moje pytanie jest dlaczego czytam „losową” liczbę znaków, gdy powtarzam pętlę while?
EdytowaćNie wiem, z jakim strumieniem mam do czynienia. Wykonuję proces taki jak:
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;
}
}