
Przy pisaniu zapytań SQL sprawdzanie statystyk wykonania to sprawa podstawowa. Pomiar ilości odczytów, pomiar czasu procesora i rzecz kluczowa pomiar czasu wykonania.
Jest to ważne. Te same wyniki możemy otrzymać pisząc różne zapytania, które zostaną wykonanie mniej lub bardziej wydajnie. Nie inaczej jest w PowerShell, z jedną różnicą, że rzadko…
dbamy o pomiar?
Po co? Nie widzimy powodów aby to robić. Najważniejsze, że działa a po drugie czy coś trwa minutę, czy 5, jeszcze nie robi nikomu różnicy. W takim razie kiedy powinniśmy myśleć o pomiarze wykonania skryptów PowerShell?
Wykonuje się bardzooo długo
Jakiś czas temu otrzymałem wiadomość z pytaniem. Mam pętlę, która „wykonuje się bardzo długo i nie wiem dlaczego”. Właśnie w takich sytuacjach przydaje się pomiar, który może pomóc wychwycić miejsca problematyczne.
3 sposoby na pomiar czasu wykonania
Measure-Command
Natywne polecenie które umożliwi Ci łatwe użycie i szybki pomiar. Wystarczy, że owiniesz swój kod w blok skryptu {}
który będzie wartością dla parametru Expression
.
Uwaga, nasz skrypt się wykona w tle ale wyników jego działania nie zobaczymy na „ekranie”. To nie wada, tak to działa.
Wyliczanie różnic czasu
Czasochłonna metoda. Wymaga od nas, w wybranych miejscach skryptu zachowania do zmiennej daty. Następnie wyliczania różnicy w celu uzyskania rezultatu.
Lepiej wykorzystaj następny sposób.
System.Diagnostics.Stopwatch
Najlepszym według mnie sposobem na pomiar jest wykorzystanie klasy [Stopwatch]
który swoim działaniem przypomina stoper. Na początku tworzysz instancję klasy [System.Diagnostics.Stopwatch]
i uruchamiasz stoper metodą startNew()
. Obiekt tej klasy ma własność Elapsed
, której wartość rośnie do czasu wywołania metody Stop
(lub Restart
)
Jest to o tyle wygodne, że możesz śledzić czas, jaki upłyną pomiędzy fragmentami kodu, poprzez sprawdzanie własność Elapsed
. Ułatwia to identyfikację czaochłonnych sekcji skryptu, które można próbować poprawiać.
PowerShell Pro Tools
W Visual Studio Code, którego używam zamiast PowerShell ISE dostępne jest rozszerzenie PowerShell Pro Tools, które ma pomagać między innymi w analizie wydajności skryptów.
Sam jeszcze się temu przyglądam i wspominam o tym jako ciekawostka. Zobacz, jak to mniej więcej działa.

Wygląda dobrze, niestety nie zawsze działa jak należy i ma swoją (niewysoką) cenę. Więcej o rozwiązaniu znajdziesz tutaj.
Podsumowanie
Pomiar czasu wykonania skryptów nie jest czymś, o czym myślimy w pierwszej kolejności. Jednak może się przydać np. przy wykonywaniu refaktoring kodu, do sprawdzenia efektów zmian.
W zależności od potrzeby sięgam po inne metody. Measure-Command
, gdy potrzebuję porównać czasy wykonania dwóch poleceń lub instrukcji. Klasy Stopwatch
, gdy chcę znaleźć miejsce w skrypcie, które może mieć potencjał do poprawy.