Hallo Zusammen,
ich habe ein komisches Problem:
Mein Programm startet einen Command-Line basierten Compiler per Process und leitet die Ausgabe um. Soweit so gut. Dies hat bisher auch immer super funktioniert.
Nun habe ich eine Source-Datei kompiliert, die mehr Fehler als sonst (also größeren StdOut-Buffer) hatte und dabei hängt sich dann mein Programm beim Lesen des Streams auf. Dabei sind es aber nicht immens viele Daten, eher ein paar kB.
Ich denke es könnte damin zusammenhängen, dass dieser Command-Line compiler wieder andere exe-Dateien aufruft, denn ich frage noch den Ausgang einer anderen Datei mit über 200 kB StdOut-Buffer ab und das funktioniert wunderbar.
Gibt es eine Erklärung (und vielleicht Lösung) für dieses Verhalten??
Vielen Dank schonmal
Christof
Hallo christof.k,
ich habe folgenden Test durchgeführt:
Ein C# Programm, das die Ausgaben einliest, startet ein Perl-Programm.
process.StartInfo.FileName = "perl.exe";
process.StartInfo.Arguments = "output.pl";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
Das Perl-Programm gibt 100k Text aus, startet ein drittes Programm (per system ()) und gibt noch mal 100k aus. Das dritte Programm (wieder C#) gibt ebenfalls 100k Text aus.
Die 300k Text haben noch nicht mal Zeilenumbrüche enthalten.
Es sind keine Blockierungen aufgetreten.
herbivore
Komisch, komisch.....
vielleicht mache ich etwas beim init falsch. Kannst Du mir Dein mini-Beispiel mal posten? Dann vergleiche ich mal, ob es signifikante Unterschiede gibt.
Vielen Dank
Christof
Hallo christof.k,
in privaten Nachrichten kann man wohl gar keine Dateien anhängen. Naja, dann kommt das Programm halt so zu dir:
herbivore
Hallo!
Ich habe Dein Programm mit meinen Parametern ausgeführt, und es hat auch geklappt.
Dann habe ich (wie ich es in meiner Applikation tue) auch stderr umgeleitet und prompt hing sich das Programm dann bereits bei StdOut auf.
Komisch und unverständlich.
Und das komischte ist: Mein StdOut buffer ist eigentlich leer, alle meine Infos kommen per StdErr. Und wenn ich StdOut nicht umleite, erhalte ich alle Infos aus StdErr.
Zusammengefasst heißt dass: StdOut alleine geht, StdErr alleine geht, beide zusammen gehen nicht!
Also irgendwie kapier ich das nicht. Gibt es irgendwo etwas, was ich übersehen habe?
Vielen Dank
Christof