VC,Delplhi,VB大比拼!!!
再谈VC,Delphi,VB的效率:
为了看看VC,Delphi,VB之间的效率到底差多少,
我写了如下的测试
VC
int i, l;j=0;int:j;
k=GetTickCount();
for(i=1;i<=1000000000;i++)
{
j=j+2;
}
l=(int)(GetTickCount()-k);
CString s;
s.Format("%d ms",l);
AfxMessageBox(s);
VB
Dim i As Long, j As Long, k As Long
j = 0
k = GetTickCount()
For i = 1 To 1000000000
j = j + 2
Next i
MsgBox CStr(GetTickCount() - k) & "ms"
Delphi:
var
start,i,k:integer;j:integer;
s:string;
start:=windows.GetTickCount();
j:=0;
for i:=1 to 1000000000 do
j:=j+2;
k:=abs(windows.GetTickCount()-start);
s:=format('%d ms',[K]);
application.MessageBox(Pchar(s),'test',MB_OK);
我的机器上测试,时间如下:
VC: 0ms
VB: 3200ms
Delphi:2500ms
从上面看出VC效率最高,由于VC代码优化效率高,所花时间为0,
而VB花了8.2秒,Delphi花了6.4秒,Delphi比VB稍微快了一点,
从上面数据看出,VC效率最高,令Delphi和VB望其背顶,
而VB和Delphi基本上属于同一档次,效率相差不大,(Delphi稍微快些)
为什么VC是0ms,因为VC编译器优化了代码!!(大家注意到没有循环体内没用到循环变量i)
再看VC和Delphi
VC:
int i, l;j=0;_int64:j;
k=GetTickCount();
for(i=1;i<=1000000000;i++)
{
j=j+i;
}
l=(int)(GetTickCount()-k);
CString s;
s.Format("%d ms",l);
AfxMessageBox(s);
Delphi:
var
start,i,k:integer;j:int64;
s:string;
start:=windows.GetTickCount();
j:=0;
for i:=1 to 1000000000 do
j:=j+i;
k:=abs(windows.GetTickCount()-start);
s:=format('%d ms',[K]);
application.MessageBox(Pchar(s),'test',MB_OK);
VC: 3563ms
Delphi; 7087ms
VB中没有int64类型,所以没做比较
将VC中的_int64 j;改为double j;
将Delphi的j:int64;改为j:double;
将VB中的 j as long 改为j as double;
后VC: 6725ms
Delphi: 13563ms
VB: 4023ms
VB的double操作最慢,Delphi次之,VC最快
VC是Delphi两倍,VB是Delphi的三倍。
可见即使是做同样的操作(简单的加法),VC效率至少是Delphi的两倍
如果Delphi使用组件,而VC使用MFC类,VC的效率可能是Delphi的N倍,
这个N至少大于2.
结论:
VC不管是编译效率,速度都远优于Delphi,VB
VC的代码优化功能也远优于Delphi,VB(从第一个例子,VC是0ms看出VC的卓越的优化功能非Delphi,VB所能比!!!)
Delhi在关于浮点数操作要明显优于VB(3倍),而整数操作和基本差不多(稍快)