는 는이 목록을 사용하는 것보다 훨씬 빠른 것?
예.
나는 과거 Unity에서 실험을했는데, 이렇게하는 것은 이미지 처리와 같은 모든 프레임에서 반복 될 필요가있는 많은 양의 항목에 대해서는 완전히 괜찮습니다.
전 네트워크를 통해 HQ Image를 스트리밍하는 앱을 만들었습니다. List
으로 만들기는 쉬웠지만 Array
으로 전환하면 초당 수신 한 프레임 수가 증가했습니다.또한 메모리 할당량이입니다.
Array를 사용하는 유일한 단점은 항목을 담는 데 충분하다는 것을 확인하기 위해 많은 양의 메모리를 할당해야한다는 것입니다. 또한 배열에 넣으려는 현재 항목이 맞는지 확인해야합니다. 그렇지 않다면 더 큰 크기의 새 배열을 만든 다음 이전 데이터를 새 배열에 복사해야합니다.
유니티의 blog 또한 Update()
기능 개선 및 Array
List
을 사용 간의 상이한 성능을 도시하는 포스트를 갖는다. 실제로 성능이 크게 향상되었으며 해당 실험에서는 일 때 보다 빠르게 배열이 5x입니다.
이
유니티를 작업 할 때 나 자신에 대해 설정 한 규칙이며, 그것은 여전히 오늘날에도 사실로 remians :을 통해 당신에게 루프를 필요로
당신이 큰 항목 (200K 이상)을 저장할 필요가 .If
1 모든 프레임, 배열 및 배열의 길이를 결정하는 데 사용할 수있는 간단한 int 값을 사용하십시오. 이 .If
2는 의 크기에 대한 단지 항목입니다 만 가끔 다음 List
을 사용하여 실행됩니다.
Unity에서 실행되는 this 코드가 수정되었습니다.
배열/대한 : 6726ms (-1295415896)
목록/대한 : 15803ms (-1295415896)
배열/foreach 문 : 8511ms (-1295415896)
목록/foreach는 : 42689ms (-1295415896)
차이점은 일반적인 C# 응용 프로그램과 달리 Unity에서 매우 중요합니다.
void Start()
{
List<int> list = new List<int>(6000000);
for (int i = 0; i < 6000000; i++)
{
list.Add(UnityEngine.Random.Range(1, 10));
}
int[] arr = list.ToArray();
int chk = 0;
Stopwatch watch = Stopwatch.StartNew();
for (int rpt = 0; rpt < 100; rpt++)
{
int len = list.Count;
for (int i = 0; i < len; i++)
{
chk += list[i];
}
}
watch.Stop();
UnityEngine.Debug.Log(String.Format("List/for: {0}ms ({1})", watch.ElapsedMilliseconds, chk));
chk = 0;
watch = Stopwatch.StartNew();
for (int rpt = 0; rpt < 100; rpt++)
{
int len = arr.Length;
for (int i = 0; i < len; i++)
{
chk += arr[i];
}
}
watch.Stop();
UnityEngine.Debug.Log(String.Format("Array/for: {0}ms ({1})", watch.ElapsedMilliseconds, chk));
chk = 0;
watch = Stopwatch.StartNew();
for (int rpt = 0; rpt < 100; rpt++)
{
foreach (int i in list)
{
chk += i;
}
}
watch.Stop();
UnityEngine.Debug.Log(String.Format("List/foreach: {0}ms ({1})", watch.ElapsedMilliseconds, chk));
chk = 0;
watch = Stopwatch.StartNew();
for (int rpt = 0; rpt < 100; rpt++)
{
foreach (int i in arr)
{
chk += i;
}
}
watch.Stop();
UnityEngine.Debug.Log(String.Format("Array/foreach: {0}ms ({1})", watch.ElapsedMilliseconds, chk));
}
앱이 데이터를 추가하고 검색하는 방법에 따라 다릅니다. 한 번 쓰십시오? 읽기 전용입니까? 무작위 액세스? 추가 만 하시겠습니까? 무작위 삽입? – MickyD
나는리스트를 사용하는 것과 같은 방법으로 배열을 사용하고 있는데, 현재 루프를 포함하고있는 아이템을 추가하고 제거하는 것으로 내용을 수정하고있다. –
답변을 원하지만 자세한 내용이 필요합니다. Dictionary Vs List에 관한 질문은 어떻게 사용 하시겠습니까? 사용법은 두 가지를 비교하는 데있어 중요합니다. – Programmer