El método de lectura StreamReader no lee el número de caracteres especificados
Tengo que analizar un archivo grande, así que en lugar de hacer:
string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds
parse(unparsedFile); // takes another 4 seconds
Quiero aprovechar los primeros 4 segundos e intentar hacer ambas cosas al mismo tiempo haciendo algo como:
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);
}
Aquí está la imagen del depurador: (Agreguéint counter
para mostrar en qué iteración leemos menos de 1024 bytes)
Tenga en cuenta que allí donde se leen 643 caracteres y no 1024. En la siguiente iteración obtengo:
Creo que debería leer 1024 bytes todo el tiempo hasta llegar a la última iteración en la que los bytes remanentes son menos de 1024.
Así que mi pregunta es ¿Por qué leeré el número "aleatorio" de caracteres mientras itero el ciclo while?
EditarNo sé con qué tipo de flujo estoy tratando. Ejecuto un proceso como:
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;
}
}