2012-09-26 9 views
6

Ho incontrato questo problema oggi e mi ci è voluto un po 'per capirlo. Stavo iniziando un processo da IIS, reindirizzando il suo output standard e l'output degli errori, quindi quando il processo è terminato sarei in grado di generare un log con esso. Tutto stava funzionando bene sulla mia macchina, ma non così bene dopo averlo pubblicato.Il processo avviato si blocca quando l'output reindirizzato è relativamente grande

Il processo avrebbe dovuto funzionare solo per un po 'e poi uscire, tuttavia non lo sarebbe stato. Semplicemente smetteva di rispondere, trattenendo risorse come socket. Dopo un po ', sono stato in grado di identificare la causa del problema: il log generato era troppo grande. Dopo aver commentato Console.WriteLine dal processo in esecuzione, tutto ha funzionato bene.

Solo per chiarire come ho iniziato il processo:

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(); 

E come ho gestito che sia uscita:

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()); 
} 

Anche se so già come risolvere il problema, mi piace ancora di sapere cosa è successo veramente e perché, poiché ci deve essere un modo per me di creare un log grande quanto vorrei.

risposta

7

Il documentation for RedirectStandardOutput non descrive uno, ma due possibili scenari di stallo (come è che per una libreria di classi utili e non pericolosi ?!)

Uno si verifica quando entrambi StandardOutput e StandardError sono entrambi reindirizzati, e quando l'essere torrente leggere è pieno. Questo sembra descrivere perfettamente la tua situazione.

Una situazione piuttosto fastidiosa, ma leggi tutta la documentazione e descrivono come evitarlo.

+2

Credo che fosse davvero quello che è successo! E la risposta era nella documentazione, vergogna per me. Grazie per la risposta! –

Problemi correlati