기존 배열에 새 항목을 추가하는 가장 빠른 방법은 무엇입니까?배열에 항목을 추가하는 가장 빠른 방법
Dim arr As Integer() = {1, 2, 3}
Dim newItem As Integer = 4
은 (이미 항목의 동적 목록과 함께 작업 할 때 오히려 사용해야 알고있는 List
, ArrayList
또는 유사한 IEnumerables
. 당신이 배열을 사용하는 레거시 코드에 부착하는 경우 그러나 무엇을 할까?)
:
' 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)는 항목이 전체 배열의 두 가지 변환을 추가 할 때마다 수행되기 때문에 매우 느린 것 같습니다. B)는 더 빠를 것 같지만 배열은 ReDim Preserve
동안 한 번 복사됩니다. C)이 시점에서 가장 빠른 것 같습니다. 더 좋은 점이 있습니까? 추가 정보를
작동하지, 난 당신이 망고와 사과를 비교하는 생각 : 아무도 첫 번째 대안을 사용하지 않을 것입니다. 목록의 장점 중 하나는 새 항목을 빠르게 추가 할 수 있다는 것입니다 (배열로 변환하지 않고 항목을 추가하면 다른 대안보다 훨씬 빠름을 알 수 있습니다). 항목을 빠르게 추가하는 것에 관심이 있습니다. 목록을 사용하십시오 (배열에 전혀 의존하지 마십시오). 또한 배열을 허용하는 것보다 더 많은 옵션을 사용하여 항목을 검사/색인 할 수 있습니다. 하지만 순수한 성능 (예를 들어, 루프 내에서) 이외에는 훨씬 더 악화되어 있습니다. – varocarbas
요약 : 최상의 상황에서 배열과 목록을 사용하십시오. VB.NET은 재 치수를 재 지정할 수 있지만 배열이 통과 할 것으로 예상되는 것은 아닙니다. 배열은 요소 내에서 반복되는 고정 된 크기의 조건에서 최상의 성능을 제공합니다. 반면에, List는 요소의 수가 적고, 차원의 규칙적인 변경, 요소에 액세스하기위한 멋진 쿼리 등이 덜 반복적 인 처리를위한 것입니다.이 모든 것은 배열이 그렇게 좋지 않은 함수입니다. 따라서 고정 크기 조건에서의 성능을위한 배열; 변화하는 조건을 나열합니다. – varocarbas
추 신 : 목록은 메모리 효율이 떨어집니다. – varocarbas