Jaki jest najszybszy sposób dodania nowego elementu do istniejącej macierzy?Najszybszy sposób dodawania elementu do tablicy
Dim arr As Integer() = {1, 2, 3}
Dim newItem As Integer = 4
(już wiem, że podczas pracy z dynamicznej listy elementów należy raczej używać List
, ArrayList
lub podobny IEnumerables
. Ale co zrobić, gdy utkniesz do starszych kod, który używa tablic?)
Co próbowałem dotąd:
' A) converting to List, add item and convert back
Dim list As List(Of Integer)(arr)
list.Add(newItem)
arr = list.ToArray()
' --> duration for adding 100.000 items: 33270 msec
' B) redim array and add item
ReDim Preserve arr(arr.Length)
arr(arr.Length - 1) = newItem
' --> duration for adding 100.000 items: 9237 msec
' C) using Array.Resize
Array.Resize(arr, arr.Length + 1)
arr(arr.Length - 1) = newItem
' --> duration for adding 100.000 items: 1 msec
' --> duration for adding 100.000.000 items: 1168 msec
A) wydaje się bardzo powolny, ponieważ za każdym razem element jest dodawany dwie konwersje całej tablicy są zrobione. B) wydaje się szybszy, ale nadal tablica jest kopiowana jeden raz podczas ReDim Preserve
. C) wydaje się być najszybszy w tym momencie. Czy jest coś lepszego?
Z szacunkiem, myślę, że jesteś porównywanie jabłek z mango: nikt nie będzie kiedykolwiek używać pierwszą alternatywę. Jedną z zalet listy jest to, jak szybko możesz dodawać do niej nowe elementy (jeśli nie wykonasz konwersji do tablicy, po prostu dodaj element, zobaczysz, że jest znacznie szybszy niż jakakolwiek inna alternatywa): jeśli są zainteresowani jedynie szybkim dodawaniem elementów, korzystaniem z listy (w ogóle nie polegaj na tablicy). Również lista pozwala znacznie więcej opcji do sprawdzenia/indeksowania swoich elementów, niż pozwalają na to tablice. ALE inne niż to, w czystej wydajności (na przykład w pętlach) są znacznie gorsze ... – varocarbas
Podsumowanie: używaj tablic i list w najlepszych sytuacjach. Chociaż VB.NET pozwala na rediminację, to nie jest to, czego oczekuje się od macierzy: tablice zapewniają najlepszą wydajność w warunkach o stałych rozmiarach, po prostu powtarzają się w swoich elementach. Z drugiej strony Listy są przeznaczone do mniej iteracyjnego traktowania: mniejszej liczby elementów, regularnych zmian wymiarów, fantazyjnych zapytań w celu uzyskania dostępu do elementów itd. Wszystkie te funkcje są funkcjami, których tablice nie są tak dobre. Tak więc, tablice dla wydajności w warunkach o stałych rozmiarach; Listy zmieniających się warunków. – varocarbas
PS: Listy są również mniej wydajne pod względem pamięci. – varocarbas