2012-09-26 23 views
6

Me encontré con este problema hoy y me tomó bastante tiempo resolverlo. Estaba iniciando un proceso desde IIS, redirigiendo su salida estándar y salida de error para que cuando el proceso salga pudiera generar un registro con él. Todo estaba funcionando bien en mi máquina, pero no tan bien después de que lo publiqué.El proceso iniciado se bloquea cuando la salida redirigida es relativamente grande

Se suponía que el proceso funcionaría por un tiempo y luego saldría, sin embargo, simplemente no lo haría. Simplemente dejaría de responder, con recursos como zócalos. Después de bastante tiempo, pude identificar la causa del problema: el registro generado era demasiado grande. Después de comentar Console.WriteLine desde el proceso en ejecución, todo funcionó bien.

Solo para aclarar cómo empecé el proceso:

Process process = new Process(); 
process.StartInfo.FileName = path; 
process.StartInfo.Arguments = arguments; 
process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardOutput = true; 
process.StartInfo.RedirectStandardError = true; 
process.EnableRaisingEvents = true; 
process.Exited += Process_Exited; 
process.Start(); 

Y cómo lo manejé de salida:

private static void Process_Exited(object sender, EventArgs e) 
{ 
    Process process = (Process)sender; 
    File.WriteAllText(path, process.StandardOutput.ReadToEnd() + 
    "\r\nEXCEPTIONS\r\n" + process.StandardError.ReadToEnd()); 
} 

A pesar de que yo ya sé cómo solucionarlo, todavía me gustaría a saber lo que realmente sucedió y por qué, ya que debe haber una forma de crear un registro tan grande como me gustaría.

Respuesta

7

El documentation for RedirectStandardOutput no describe una, sino dos posibles escenarios de punto muerto (cómo es que para una biblioteca de clase útil y no peligrosos ?!)

Se da cuando ambos StandardOutput y StandardError están ambos redirigidos, y cuando el ser corriente leer está lleno Esto parece describir perfectamente tu situación.

Una situación bastante molesta, pero lea la documentación completa y describa cómo evitar que ocurra.

+2

¡Creo que eso fue lo que sucedió! Y la respuesta estaba en la documentación, lástima de mí. ¡Gracias por la respuesta! –

Cuestiones relacionadas