제대로 되었는지는 모르겠습니다.
전에 짰던 시뮬레이션 프로그램을 확장하려고 하는데...
전에는 비베로 짰었지요...
50만회의 루프를 돌리는데 시간이 엄청 걸리더군요..
그래서 빌더로 짜면 시간이 얼마만큼 단축될 수 있을까 생각하다가 간단하게 테스트를 해봤습니다.
제대로 쓸 줄 아는 툴이 하나도 없어서 제대로 된 테스트인지 모르겠습니다.
그냥 단순히 자신을 1 증가시키는 루프를 5천만회 돌릴 동안 걸리는 시간을 비교해봤습니다.
개발 환경하에서 실행하는거랑 실행파일을 직접 실행하는 거랑 차이가 많이 나더군요...
자바는 그 생각까지 못해서 빌더에서 바로 돌려서 계산된 시간입니다.
제가 한 테스트가 정확하다면 비주얼 베이직으로 만든 프로그램의 계산 속도는 C로 짠 프로그램보다 2배 가량 느렸습니다.
비주얼 C++로 짠거는 디버깅 모드에서는 에러없이 실행되는데, 릴리즈 모드로 했더니 계산 시간을 출력하고는 에러가 나네요...
이유를 모르겠습니다.
Dialog Based로 버튼 하나 추가시켜서 만들었는데...
그럼.. ^^;
실험 환경
Pentium 3 650MHz
256MB RAM
Windows 98 SE
실행 결과
Visual Basic : 5.65초(Visual Basic 내에서 실행), 0.44 ~ 0.49초(exe 파일 실행)
Visual C++ : 0.47초(Debug version), 5.03e-6(Release version - error 발생함)
Borland C++ Builder 6 : 0.48초(Debug version), 0.24초(Release version)
Java(JBuilder 7) : 1.2초
=================================================================
VB 코드
Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim start As Double
start = Timer
For i = 0 To 50000000
j = j + 1
Next
start = Timer - start
MsgBox (start)
End Sub
=================================================================
VC++ 코드
void CTimeTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
long i, j;
LARGE_INTEGER *freq = new LARGE_INTEGER;
LARGE_INTEGER *start = new LARGE_INTEGER;
LARGE_INTEGER *finish = new LARGE_INTEGER;
double etime;
char msg[11];
j = 0;
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(start);
for (i = 0; i < 50000000; i++)
j = j + 1;
QueryPerformanceCounter(finish);
etime = (double)(finish->QuadPart - start->QuadPart) / (double)freq->QuadPart;
gcvt(etime, 10, msg);
MessageBox(msg);
}
=================================================================
Java 코드
void jButton1_actionPerformed(ActionEvent e) {
Date start;
Date finish;
long i, j = 0;;
double diff;
start = new Date();
for (i = 0; i < 50000000; i++) {
j = j + 1;
}
finish = new Date();
diff = (double)(finish.getTime() - start.getTime()) / 1000f;
dialog.showConfirmDialog(this, Double.toString(diff) + "seconds..",
"Result", JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE);
}
|