jsem měl nějaké připomínky na nedávném srovnání výkonu článku, které byly dobře přijaty, a povzbudil mě, abych napsal nějaké další podobné články. Takže bez dalších okolků, umožňuje začít při pohledu na přidávání položek do pole a který přístup by byl lepší, pokud jde o výkon.
nejběžnější přístup, který vidím při přidávání položek do pole v PowerShellu, je obvykle pomocí operátora+=.,
$a = @()$a += 'data'$a$a += 'test'$a
já měl na první inicializaci pole, jinak moje pokusy přidat text by místo toho být zacházeno jako zřetězení textu, což není to, co jsem hledal v tomto příkladu. Jak jsem řekl, Je to společný přístup, který vidím, ale je to nutně nejrychlejší přístup? Odpověď zní ne.
pomocí ArrayList
odpověď na lepší výkon je v použití ArrayList. Jak můžete vidět stále více a více se stále lepším výkonem z PowerShell, obvykle uvidíte krok směrem k použití některých .,Net instance provádět podobné operace, které lze provést pomocí skutečných příkazů PowerShell nebo operátorů. Takže něco, co jsem udělal výše, lze provést takto:
$a = New-Object System.Collections.ArrayList$a.Add('data')$a.Add('test')$a
0 a 1, které vidíte při každém přidání položky, označuje index, který byla položka přidána do sbírky. Takže „data“ byla přidána v indexu 0 a „test“ byl přidán do indexu 1. To může být podle mého názoru docela nepříjemné a může znečistit potrubí a přinést nežádoucí výsledky. Můžete to obejít tím, že se ujistíte, že data jsou odeslána na nulové místo.,
máme dvě možnosti pro vytvoření kolekce položek nastavených před námi, ale další otázkou je, která z nich je nejrychlejší? Pojďme to zjistit!
neříkám, že ArrayList vyhrál pokaždé … počkejte, říkám to! Jako celkový počet položek přidáno do každé kolekci zvýšil, čas také zvýšena pro každý z přístupů s += rostoucí, spíše dramaticky u konce. Co se děje s operátorem+=, je to, že při každém použití operátora skutečně vytvoří nové pole, takže může přidat novou položku do sbírky., Ne tak docela efektivní,ale to dostane práci. Nenajdete to s přístupem ArrayList, protože přidává položku přímo do sbírky.
Jako u všech těchto typů výkonnostních testů, zakryla jsem jednoduchý až extrémní typ situací, takže pokud si naprosto chcete zmáčknout všechny možné milisekundu z vašeho PowerShell skripty, pak budete určitě chtít podívat na ArrayList přístup.