c# DataTable과 List의 인덱스 액세스 성능 비교
테이블 형태의 데이터를 이용해야 할 때 DataTable과 List 가운데 어느 걸 써야 할지 고민스러울 수 있다. 클래스를 만들어 List에 넣어 이용하는 거보다 DataTable을 쓰는 게 더 편하지만 느리다. 그렇다면 얼마나 느릴까?
아래는 인덱스를 안다는 전제 아래 인덱스로 액세스하여 데이터를 읽는 데 걸리는 시간들을 측정하는 예제다. 웜-업을 제외한 다섯 번씩의 평균은 DataTable이 859,208이고 List가 75,545로 열 배 넘게 차이났다.
DataTable DataTable1 = new();
List<int> Ints = new();
Random Random1 = new();
private void Form1_Load(object sender, EventArgs e)
{
DataTable1.Columns.Add();
for (int i = 0; i < 100; i++)
{
DataTable1.Rows.Add(i);
Ints.Add(i);
}
}
private void button1_Click(object sender, EventArgs e)
{
Stopwatch stopwatch = new();
stopwatch.Start();
for (int i = 0; i < 1000000; i++)
{
int int1 = Convert.ToInt16(DataTable1.Rows[Random1.Next(100)][0]);
}
textBox1.AppendText(stopwatch.ElapsedTicks.ToString() + "\r\n");
}
private void button2_Click(object sender, EventArgs e)
{
Stopwatch stopwatch = new();
stopwatch.Start();
for (int i = 0; i < 1000000; i++)
{
int int1 = Ints[Random1.Next(100)];
}
textBox2.AppendText(stopwatch.ElapsedTicks.ToString() + "\r\n");
}