Different with ArrayList, List<T> – Boxing, None Boxing
example source project :
ArrayList는 값을 object형식으로 방식해서 받게 되어 모든 타입을 담을 수 있다.
하지만 Boxing이 일어나는데 이러한 빈번한 Boxing을 막기 위해 우리는 Generic에 있는 List<type>을 이용한다.
다음은 Boxing처리되는 ArrayList와 Boxing되지 않는 Generic List<>의 비교를 보도록 한다.
Boxing 되는 예 (ArrayList.Add(object))
Boxing 되지 않는 예 (List<RGB>.Add(RGB))
실행 결과
실행 결과 대략적으로 6배 정도의 속도 차이를 보인다.
예제 소스
using System;
using System.Collections;
using System.Collections.Generic;
namespace BoxingTest
{
struct RGB
{
public int red;
public int green;
public int blue;
public RGB(int red, int green, int blue)
{
this.red = red;
this.green = green;
this.blue = blue;
}
public override string ToString()
{
return red.ToString("X") + green.ToString("X") + blue.ToString("X");
}
}
class Program
{
static ArrayList boxValue;
static List<RGB> noBoxValue;
static void Main(string[] args)
{
DateTime start;
DateTime middle;
TimeSpan end;
RGB rgb = new RGB(255, 255, 255);
#region None Boxing
Console.WriteLine("박싱되지 않는 List<RGB>.Add(RGB)");
noBoxValue = new List<RGB>();
start = DateTime.Now;
for (int i = 0; i < 10000000; i++)
noBoxValue.Add(rgb);
middle = DateTime.Now;
end = middle - start;
Console.WriteLine("시작 = {0}, 끝 = {1}, 경과시간 = {2}", start.ToString("hh:mm:ss"),
middle.ToString("hh:mm:ss"),
end.ToString());
#endregion
#region Boxing
Console.WriteLine("박싱되는 ArrayList.Add(object)");
boxValue = new ArrayList();
start = DateTime.Now;
for (int i = 0; i < 10000000; i++)
boxValue.Add(rgb);
middle = DateTime.Now;
end = middle - start;
Console.WriteLine("시작 = {0}, 끝 = {1}, 경과시간 = {2}", start.ToString("hh:mm:ss"),
middle.ToString("hh:mm:ss"),
end.ToString());
#endregion
}
}
}
댓글
이 글 공유하기
다른 글
-
iTunes Programming - SelectedTracks
iTunes Programming - SelectedTracks
2009.03.24 -
훈스 C# 스터디 5주차 - CLR의 동작 , 메모리 관리, Boxing, UnBoxing, Generic
훈스 C# 스터디 5주차 - CLR의 동작 , 메모리 관리, Boxing, UnBoxing, Generic
2009.03.11 -
정규표현식(Regular Expression) Href URL 캡쳐(Capture)
정규표현식(Regular Expression) Href URL 캡쳐(Capture)
2009.03.02 -
여러줄을 한번에 StringBuilder로 감싸는 방법~! - Editplus 정규표현식, 바꾸기 기능
여러줄을 한번에 StringBuilder로 감싸는 방법~! - Editplus 정규표현식, 바꾸기 기능
2009.02.26