batch Skript oder C Code, was ist schneller?

Spring23

Cadet 4th Year
Registriert
Juni 2010
Beiträge
74
Hat jemand zufällig eine Ahnung, was von folgenden Lösungen die schnellste und Effizienteste ist?

1. Eine Batch Datei
2. Ein kleines C Progarmm, als exe Datei mit dem selben Code als system() - Call
3. Ein kleines C Programm mit ShellExecute()

Im Grunde sollen alle 3 Skripte das selbe machen. Ich weiß allerdings nicht, wie ich herausfidnen kann, was schneller ist und würde gerne die schnellste Lösung nutzen, da das Skript von einem anderen Programm recht häufig ausgeführt wird und ich ein Fan von schneller Software bin.
 
Sehr wahrscheinlich die kompilierte exe.

Allerdings kommts drauf an, wie du programmiert hast :D
Aber generell gilt, dass bereits kompilierte Programme schneller sind, da sie nicht zur Laufzeit übersetzt werden müssen und der Code bereits in Binärform vorliegt. Noch dazu sind Programme in C fast das schnellste, was es gibt.

Und warum kannst du das nicht einfach überprüfen? ^^
 
Zuletzt bearbeitet:
Das hängt von 100 Faktoren ab, die mit der Art der Umsetzung erstmal nichts zu tun haben.
Wenn es sich um eine simple Aufgabe handelt macht es vermutlich keinen merklichen Unterschied.

Du kannst ja einfach die Dauer des Durchlaufs messen, dann weisst du es genau.
 
In diesem Fall möchte ich lediglich mit Hilfe eines move Befehls eine Datei umbenennen.

Allderdings habe ich die Frage so allgemein gestellt, da ich öfters kleinere batch Dateien schreibe und ich mich frage, ob das in C schneller ginge weil ich von allen nur immer Höre wie schnell C ist.

Die Geschwindigkeit testen ist nicht so leicht, da das Porgarmm ohnehin recht flott ist. Ich optimiere nur gerne. :D

Edit:
Mir fällt gerade ein, ich glaube ich weiß doch wie ich die Geschwindigkeit testen kann.
Hat jemand eine Ahnung, was von der CPU Last her besser sein müsste?

Nehmen wir einfach mal die 3 Möglichkeiten:
1. Batch: move oldfile newfile
2. system(move oldfile newfile)
3. ShellExecute(bla, move oldfile newfile, bla);

und ja, ich weiß, dass das so noch nicht läuft, mir gehts nur ums Prinzip, dass ich mir die beste Lösung angewöhne, aber bisher klingt das so, als wäre das völlig egal.
 
Zuletzt bearbeitet:
Ja gut, in dem Fall macht das vermutlich gar keinen spürbaren Unterschied.
 
Achsooooo ich dachte du benutzt Libraries in C um in deinem Beispiel hier die Datei zu verschieben.

In C kannst du Zeiten messen. Einfach googlen.
Wie oft machst du denn das, dass es nicht schnell genug gehen kann? :D
Ich würde für das Verschieben/Umbenennen Bibliotheken importieren und das ganze so über die Bühne gehen lassen.

Allerdings nicht in C. C stinkt :D
Python ist zwar nicht so flott, allerdings sind solche Scripte (jetzt nicht nur umbenennen) sehr viel schneller geschrieben (als C-Scripte) und sehr gut zu lesen im Gegensatz zu Batch.
Allerdings hängt das auch vom Programmierer ab ;)
 
Wie gesagt, geht eher um den Grundsatz und in diesem Fall muss ich selbst sagen, dass es egal ist. Hat jemand eine Idee, was mehr CPU schluckt, oder wie ich das noch messen könnte?
 
Wenn du das Optimum beim Kopieren willst, such dir ein spezielles Tool dafür, was darauf ausgelegt ist - Fastcopy bspw. Das was du machen willst, ist vollkommen irrelevant, denn ob du das nun via Doppelklick, Batch oder WinApi aufrufst, ... In allen Fällen wird move aufgerufen und das wird weder schneller noch langsamer via Batch o.ä.
 
Baue doch ein Verzeichnis mit zwei Unterverzeichnissen TargetA\ und TargetB\.
Dann lasse in der Batch und im kompilierten C-Code (der interpretierte wird langsamer sein) jeweile eine Datei 10.000 mal hin und her kopieren. Wenn Caches greifen, dann in beiden Fällen, Vergleich also wieder fair.
Ich denke bei reinem Shellexecute bringt C - wenn überhaupt - keinen großen Vorteil. Sollte ja im Hintergrund im gleichen Kontext laufen.

Tipps:
 
system() und ShellExecute() starten beide die Shell, was auch beim abarbeiten einer Batchdatei passieren würde.
Bei der Batchdatei allerdings nur einmal, bei den C-Funktionen für jeden einzelnen Aufruf neu. Deswegen wäre
die Batchdatei nicht nur schneller, sondern die Umsetzung mit einer Reihe von system() bzw ShellExecute()
Aufrufen einfach nur bescheuert.

Wenn man die eigentliche Aufgabe, die man erledigen will in C umsetzen würde, wäre allerdings diese Lösung
sehr wahrscheinlich schneller, wenn auch nicht zwangsläufig.
 
Vielen Dank! Ich denke, damit wäre meine Frage soweit geklärt. Vielleicht werde ich trotzdem mal noch einen Test durchführen, aber das klingt eigentlich auch logisch, was hier gesagt wurde.
 
Zurück
Oben