Kommandozeilen-argument-parameter Begrenzung
Sprache: C#
Ich haben, um einen großen string-array (dynamisch erstellt) als argument ausführen einer exe-Datei.
Ich bin am überlegen von acheiving es durch die folgenden 2 Möglichkeiten. Aber ich bin nicht sehr zuversichtlich.
-
Kann ich es schaffen, wie ein string durch ein Leerzeichen voneinander getrennt. Ich kann aufrufen, die exe-Datei über Process.Start.
Daher der running Kind-Prozess die Auffassung, die Raum und gilt als ein string-array.
Jedoch bin ich unsicher über den string-array-Begrenzung. Nehme an, wenn mein string-array zählen mehr als 10.000 -
Kann ich es als string getrennt durch ein spezielles Zeichen, welches nie fallen in Daten. Ich kann aufrufen, die exe-Datei mit dem string. Das ausführen von Kind-Prozess betrachtet es als einen einzigen string, wo kann ich es teilen, mit dem gleichen Trennzeichen, um die string-array zurück. Aber hier bin ich unsicher über den Befehl Größe. Wird, die, wenn Sie die Befehlszeilen-Zeichenfolge der Länge ist groß
Kann mir jemand helfen lassen Sie mich wissen, die parameter Größe Einschränkungen
- Ich würde vorschlagen, das schreiben in eine temp-Textdatei erstellen, den Prozess mit der text-Datei als argument, warten auf den Prozess zu beenden, dann löschen Sie die Datei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kommt es auf die OS:
Sehen Eingabeaufforderung (Cmd. exe-Datei) command-line string Einschränkung auf der Microsoft Support-Website.
(Hervorhebung von mir)
In Bezug auf die Größe eines string Arrays - wenn Sie viele Millionen von Zeichenfolgen in einem string-array - Sie sind meist limitiert durch die Menge des verfügbaren Speichers.
Obwohl eine schlechte Idee,
Process.start
mituseshellexecute=false
aufrufen würdecreateprocess()
die es ermöglicht 32767 Zeichen in die Befehlszeile (obwohl dies auch die maximale Größe für die gesamte Umwelt block)Wenn Sie auf der Durchreise sind 10,000 Argumente an ein Programm, sollten Sie diese Argumente in einer Datei und das Lesen der Datei von der Festplatte.
Sie speichern könnte die Argumente in eine text-Datei und übergeben Sie die text-Datei als argument. Ihre Anwendung kann dann analysieren Sie den text-Datei zu analysieren, die Argumente.
Es ist nicht wirklich eine gute Praxis, verwenden Sie die Befehlszeile-Argumente für die großen arrays. Stellen Sie Ihre Argumente in einer Konfigurationsdatei, statt, und übergeben Sie einfach den Dateinamen als Kommandozeilen-argument.
Den OS-limit variiert mit der Windows-version. Es könnte etwa sein, 2k oder 8k:
http://support.microsoft.com/kb/830473
Möchten Sie vielleicht erwägen, eine parameter-Datei und übergibt die Datei als parameter.
Fand ich dies:
OS: maximale Befehlszeile Länge 32767 Zeichen (diese Beschränkung ist aus unicode-Zeichenfolge-Struktur), Eingabeaufforderung maximale Länge 8192 Zeichen (diese Beschränkung ist aus cmd.exe). Sie können auch überprüfen:
http://support.microsoft.com/kb/830473
Hoffe, dass dies helfen.
Wenn das starten des untergeordneten Prozesses direkt aus dem übergeordneten Prozess akzeptabel ist (
UseShellExecute
= false
), dann könnte man umleitenStandardInput
von der Kind-Prozess und übergeben, willkürlichen Größe Daten werfen. Hier ist ein Beispiel übergeben ein array von 100000 strings und andere Sachen, serialisieren Sie Sie in binäres format.Ausgabe:
Dieses Beispiel führt in 6 sec in meinem Rechner.