myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Stark unterschiedliches Zeitverhalten zwischen Aufruf von Kommandozeile und in C# mit Process.Start
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Stark unterschiedliches Zeitverhalten zwischen Aufruf von Kommandozeile und in C# mit Process.Start

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
suedsee suedsee ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 5
Entwicklungsumgebung: MS Visual Studio 2017


suedsee ist offline

Stark unterschiedliches Zeitverhalten zwischen Aufruf von Kommandozeile und in C# mit Process.Start

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich rufe in C# ein exe-Programm (stammt nicht von mir) auf und setze dabei ein Argument. Der Aufruf sieht wie folgt aus:

C#-Code:
            Process pc = new Process();
            pc.StartInfo.FileName = @"c:\pfad\programmXY.exe";
            pc.StartInfo.Arguments = "-test";
            pc.Start();
            pc.WaitForExit();
            myReturnCode = pc.ExitCode;

Wenn ich nun in einer DOS-Box (Kommandozeilenaufforderung) folgenden Befehl eingebe:
c:\pfad\programmXY.exe -test
dann dauert die Ausführung (wird auch in einer log-Datei vom aufgerufenen Programm protokolliert) ca. 1,5 Sekunden.

Der obige Aufruf aus C# mit Process.Start dauert aber ca. 26 (in Worten: sechsundzwanzig!) Sekunden!

Das ganze ist beliebig reproduzierbar.

Woran kann das liegen? Wie erreiche ich mit C# eine vergleichbare Ausführungszeit des fremden Programms?

Was mir noch aufgefallen ist: Während der 26 Sekunden hört man die Festplatte stark arbeiten; vielleicht ein Hinweis für die Ursache?

Gruß
suedsee


mycsharp.de  Moderationshinweis von Abt (07.06.2019 13:29):

Bitte wie bereits gesagt die Code Tags verwenden
 [Hinweis] Wie poste ich richtig?

 

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von suedsee am 07.06.2019 13:13.

Neuer Beitrag 07.06.2019 13:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.284
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mal davon abgesehen, dass du gleich zwei Threads aufgemacht hast, solltest du auch mal sagen wo er in deinem Code hängt.
Hängt er am WaitForExit?
Oder dauert der gesamte Durchlauf deines Codes, den wir hier nicht sehen und nicht kennen, so lange?

T-Virus
Neuer Beitrag 07.06.2019 13:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
suedsee suedsee ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 5
Entwicklungsumgebung: MS Visual Studio 2017

Themenstarter Thema begonnen von suedsee

suedsee ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Im Debugger hängt er auf dem WaitForExit

sorry, habe bereits die Löschung des versehentlich doppelten threads beantragt

Ergänzung:
Wobei, wenn ich nach Ausführung von pc.Start die 26 Sekunden warte, dann geht er bei pc.WaitForExit() sofort weiter.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von suedsee am 07.06.2019 13:21.

Neuer Beitrag 07.06.2019 13:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.284
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dann wäre eben die Frage ob der Task auch tatsächlich z.B. im Task Manager nach deinen erwarteten 1,5 Sek. nicht mehr angezeigt wird.
Auch müsstest du prüfen ob der Task ggf. selbst länger läuft weil er z.B. auf Resourcen zugreifen will für die dein Benutzer keine Berechtigungen hat.

Z.B. kann es dann sein, dass dein Debug Lauf einen anderen Benutzer oder andere Berechtigungen hat und deshalb bestimmte Zugriffe blockiert werden.
Dies ist aber nur geraten und da es keine Details gibt außer, dass dein Programm beim debuggen hängt, ist es schwer die Ursache zu finden.

Hier braucht es mehr Details um ggf. die Ursache zu finden.

T-Virus
Neuer Beitrag 07.06.2019 13:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.943
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Es ist nahezu auszuschließen, dass es am Process Start selbst liegt.

Es wird viel eher daran liegen, wie eine Applikation jeweils gestartet wird - und der Start über Process.Start() ist eben nicht identisch zur Kommandozeile.
Allein die Tatsache, dass die Kommandozeile eben eine Shell ist und Process.Start nicht kann sowas auslösen.
Ebenso bekommt die Anwendung über die Kommandozeile direkt ein Working Directory, was bei Deinen Startparameter komplett fehlt - vom aktuellen Usercontext ganz abgesehen.

 [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden
Bitte teste das Verhalten mit einem vergleichbaren Aufruf.

Alles andere ist aktuell Glaskugelraten.
Neuer Beitrag 07.06.2019 13:34 Beiträge des Benutzers | zu Buddylist hinzufügen
suedsee suedsee ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 5
Entwicklungsumgebung: MS Visual Studio 2017

Themenstarter Thema begonnen von suedsee

suedsee ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

danke für eure Kommentare und Tipps.

Zunächst einmal die gute Nachricht: Das Problem hat sich erledigt.

Es trat nur genau an dem einen Tag auf, an dem ich es gepostet habe. Am nächsten Tag war die Laufzeit auch aus C# heraus wieder identisch mit dem der Kommandozeile. Also offenbar hat der PC-Neustart dies bewirkt. Man kann jetzt wohl nur noch Vermutungen aufstellen. Vielleicht hing etwas im Speicher (wobei zumindest laut Taskmanager noch reichlich frei war). Vielleicht war irgend etwas mit dem VS 2017, vielleicht irgend etwas mit dem Debugger, vielleicht vielleicht vielleicht ...

Ein gewisses ungutes Gefühl in der Magengrube bleibt allerdings ... Das Problem habe ich seitdem täglich getestet und ist nicht wieder aufgetreten.

Gruß
suedsee

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von suedsee am 13.06.2019 16:23.

Neuer Beitrag 13.06.2019 16:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BhaaL BhaaL ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.02.2008
Beiträge: 618
Entwicklungsumgebung: VS2017


BhaaL ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich hatte mal ein ähnliches Problem, was sich auch am nächsten Tag oder so von selbst gelöst hatte - Grund war dort ein .NET Update (oder wars eine Visual Studio Installation? Bin mir nicht mehr ganz sicher).
Auf jeden Fall war zu dem Zeitpunkt NGen noch nicht gelaufen, was die Startzeit maßgeblich beinflußt hatte - zwar nicht im Bereich einer halben Minute; aber an der Stelle doch merklich weil wir beim Process.Start mit sehr knappen Timeouts und Retries gearbeitet hatten die dann auf einmal permanent am triggern waren.
Neuer Beitrag 13.06.2019 16:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Monate.
Der letzte Beitrag ist älter als 3 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 16.09.2019 00:27