miałem kilka komentarzy na temat niedawnego artykułu porównującego wydajność, które zostały dobrze przyjęte i zachęciły mnie do napisania Więcej z tych podobnych artykułów. Więc bez zbędnych ceregieli, pozwala zacząć patrzeć na dodawanie elementów do tablicy i które podejście byłoby lepsze pod względem wydajności.
zazwyczaj najczęściej spotykanym podejściem, które widzę przy dodawaniu elementów do tablicy w PowerShell jest użycie operatora+=.,
$a = @()$a += 'data'$a$a += 'test'$a
musiałem najpierw zainicjować tablicę, w przeciwnym razie moje próby dodania tekstu byłyby traktowane jako tekst łączący, co nie jest tym, czego szukam w tym przykładzie. Jak powiedziałem, jest to wspólne podejście, które widzę, ale czy jest to koniecznie najszybsze podejście? Odpowiedź brzmi nie.
Korzystanie z ArrayList
odpowiedź na lepszą wydajność jest w użyciu ArrayList. Jak widać coraz więcej z coraz lepszą wydajność z PowerShell, zazwyczaj widać ruch w kierunku korzystania z niektórych .,Instancje sieciowe do wykonywania podobnych operacji, które można wykonać za pomocą rzeczywistych poleceń lub operatorów PowerShell. Tak więc coś, co zrobiłem powyżej, można zrobić w następujący sposób:
$a = New-Object System.Collections.ArrayList$a.Add('data')$a.Add('test')$a
0 i 1, które widzisz, są wypisywane za każdym razem, gdy dodaję element, wskazuje indeks, którego element został dodany do kolekcji. Tak więc „dane” dodano przy indeksie 0, a „test” dodano do indeksu 1. Moim zdaniem może to być dość irytujące i może zanieczyszczać rurociąg i przynieść niepożądane rezultaty. Możesz to obejść, upewniając się, że dane są wysyłane do lokalizacji zerowej.,
mamy dwie opcje tworzenia kolekcji przedmiotów ustawionych przed nami, ale następne pytanie brzmi, która z nich jest najszybsza? Przekonajmy się!
nie mówię, że ArrayList wygrał za każdym razem … czekaj, mówię to! Wraz ze wzrostem całkowitej liczby przedmiotów dodanych do każdej kolekcji, czas również wzrósł dla każdego z podejść z + = rośnie dość dramatycznie pod koniec. Co się dzieje z operatorem += jest to, że faktycznie buduje nową tablicę za każdym razem, gdy używasz operatora, dzięki czemu może dodać nowy element do kolekcji., Nie do końca wydajny, ale daje radę. Nie znajdziesz tego w podejściu ArrayList, ponieważ dodaje element bezpośrednio do kolekcji.
podobnie jak w przypadku każdego z tego typu testów wydajności, ukryłem proste sytuacje ekstremalne, więc jeśli absolutnie chcesz wycisnąć każdą możliwą milisekundę ze swoich skryptów PowerShell, to na pewno chcesz spojrzeć na podejście ArrayList.