|
여태 까지 try..catch...를 걸면 성능 저하를 가져 온다고 해서 사용을 자제 해왔었습니다.
네트웍 프로그램이라서 반응속도가 좀 느리면 안좋기 때문에 더욱 사용이 꺼려 지더군요.
우선 내부적으로 테스트를 하고서 문제가 없어서 실제 서버에 올려서 서비스를 하니까..
예외의 상황들이 발생하는거 같더군요.
그래서 오늘 한번 얼마나 성능의 저하가 있을까...하고 초무식간단하게 시간 테스트를 해봤습니다.
우선 try...catch...를 배제한 코드와..
float a;
a = 129832789324;
long ttime;
ttime = GetTickCount();
for(int i=0;i<1000000;i++)
{
a = a + 1000;
a = a / 3324.12;
a = a * 23.43;
a = a / 3324.12;
a = a * 23.43;
a = a + 1000;
a = a / 3324.12;
a = a * 23.43;
a = a / 3324.12;
a = a * 23.43;
}
ttime = GetTickCount() - ttime;
Memo1->Lines->Add(ttime);
for문이 한번 돌때마다 try..catch..를 사용한 경우입니다.
float a;
a = 129832789324;
long ttime;
ttime = GetTickCount();
for(int i=0;i<1000000;i++)
{
try
{
a = a + 1000;
a = a / 3324.12;
a = a * 23.43;
a = a / 3324.12;
a = a * 23.43;
a = a + 1000;
a = a / 3324.12;
a = a * 23.43;
a = a / 3324.12;
a = a * 23.43;
}catch(...)
{
}
}
ttime = GetTickCount() - ttime;
Memo1->Lines->Add(ttime);
테스트 결과 try..catch...를 사용하지 안았을경우 평균 100ms
사용했을 경우에는 140ms나오더군요.
뭐 나누기 연산이 가장 부하가 많이 걸릴거 같아서 이따위로.(ㅠㅠ)
테스트를 해봤습니다. 백만번의 for문에서 40ms 차이라면 실제 성능에서는
별 차이가 없지 않을가요?
실제로 프로젝트에서는 아마 천번도 돌지 않을거 같습니다. for문 안에는주로
데이터를 send하는 부분이 들어 갈거구요.
과연 이만한 성능차이가 프로젝트에 영향을 끼칠까요?
|