Früher las ich ein großes Antwort auf SO und ich fragte mich, warum es in PowerShell noch nicht emuliert wurde.
Unter UNIX / Linux können wir den Befehl time
als einfaches Benchmark-Tool verwenden.
In der Powershell können wir das measure-command
ähnlich verwenden:
Aber das ist nicht das gleiche wie das time
, das reell, user und sys anzeigt (Siehe den Unterschied zwischen den dreien in der verknüpften SO-Antwort.)
Dies ( time
) ist offensichtlich ein so nützliches kleines Werkzeug. Gibt es benutzerdefinierte Cmdlets für diese Funktionalität oder ist es bereits in V3 oder für zukünftige Versionen geplant?
Schreiben Sie ein C-Programm mit der GetProcessTimes-Funktion. Sie finden die Dokumentation in: Ссылка .
In den Beispielen des Buches "Windows System Programming" kommt ein Programm, das diese Funktion verwendet, um genau das zu erhalten, was Sie benötigen (Elapsed, Kernel, User Times). Das Programm heißt "timep.exe" und befindet sich in den runX-Unterverzeichnissen (das X stammt von der Version von Visual Studio, die in der Kompilierung verwendet wird) innerhalb des gezippten Beispielarchivs. Hier ist die Autorenseite, von der Sie dieses Archiv herunterladen können Ссылка , natürlich ist der Quellcode auch da, so dass Sie genau sehen konnten, wie timep .exe funktioniert.
Ich habe beide Zeiten verwendet, die von System.Diagnostics.Process
und GetProcessTimes
bereitgestellt wurden, um eine Implementierung für time
zu erstellen:
Es ist nicht wirklich perfekt, da die tatsächliche Zeit ungefähr 11 Sekunden beträgt (für sleep 10
), da ich einen Powershell-Prozess erstelle und den Befehl darin ausführe. Ich werde sehen, ob ich ein Cmdlet oder etwas dafür implementieren kann.
Warnung, PowerShell voraus.
Ein Kaffee half mir dabei:
%Vor%Und wenn Sie wollen, dass nichts ausgegeben wird, ersetzen Sie einfach mit out-null:
%Vor%Du benutzt es so:
%Vor%Der Prozess, den Sie zu messen versuchen, kann sich auch im Hintergrund verzweigen und ausgeführt werden, wodurch die Messung Measure-Command unterbrochen wird. Sie können Start-Prozess mit dem Parameter -Wait verwenden, um die erwartete Vollzeitmessung zu erhalten. Hier ist ein Beispiel, das zeigt, dass stackoverflow.com 34 Sekunden benötigt, um eine inaktive Verbindung zu schließen:
%Vor%Tags und Links powershell