VC,Delplhi,VB大比拼!!!

test2002 2002-10-16 08:59:28
再谈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倍),而整数操作和基本差不多(稍快)
...全文
46 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmily1688 2002-10-23
  • 打赏
  • 举报
回复
建议用1和0来编程,这样键盘就用三个键就行了,1,0和回车键,把回车键也去掉,这样你就是高手了。
hmily1688 2002-10-23
  • 打赏
  • 举报
回复
没有必要吧,楼主准备挨刀吧
test2002 2002-10-23
  • 打赏
  • 举报
回复
更正:
j=0;_int64:j;
改为
_int64 j=0;
test2002 2002-10-17
  • 打赏
  • 举报
回复
纠正:

int i, l;j=0;int:j;

为:
int i, l;int j;j=0;

不好意思,我输错了
test2002 2002-10-17
  • 打赏
  • 举报
回复
纠正:

int i, l;j=0;int:j;

为:
int i, l;int:j;j=0;

不好意思,我输错了

CodeDuDu 2002-10-17
  • 打赏
  • 举报
回复
真是个无聊的话题
都N编了
ly_liuyang 2002-10-17
  • 打赏
  • 举报
回复
又是这些无聊的比较,你能做到强大的软件就是好,比这个没有意思的,不过开发效率绝对是Delphi快VC最少2倍
test2002 2002-10-17
  • 打赏
  • 举报
回复
to breezing:
用for是为了测试方便呀.要不那么快怎么测时间呢

不过就这么简单的测试也说明问题了;
VC的优化功能非常强大,效率非常高
test2002 2002-10-17
  • 打赏
  • 举报
回复
to breezing:
怎么可能呢?我就在Win2000 professional 和 win2000 server
及win98 测试通过的,
怎么可能Delphi 快呢????
胡扯!!!!!!!
marf_cn 2002-10-16
  • 打赏
  • 举报
回复
不能以偏概全
breezing 2002-10-16
  • 打赏
  • 举报
回复
又测了int64的情况,分为不同情况:单独运行,同时运行

delphi都要比vc快!

环境:delphi6, vc6
breezing 2002-10-16
  • 打赏
  • 举报
回复
我测了一下
vc 3297ms
delphi 844ms

环境:win2000,p41.9,256M
ocool 2002-10-16
  • 打赏
  • 举报
回复
不能这样比!
breezing 2002-10-16
  • 打赏
  • 举报
回复
test2002 (test2002)
这位仁兄,这段代码在我这怎么不能执行呢?

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);
Sumie@Sam 2002-10-16
  • 打赏
  • 举报
回复
同意 smhpnuaa(天将降大任于斯人也!)
幼稚!从什么地方抄的吧?
breezing 2002-10-16
  • 打赏
  • 举报
回复
同意 smhpnuaa(天将降大任于斯人也!)

如果你认为编程全是你的for循环,那你的水平还低的很啊!

用汇编写程序吧,不要用vc了,vc和汇编比,不仅编译的程序大,而且执行效率低啊!
cilng 2002-10-16
  • 打赏
  • 举报
回复
越容易上手的越慢。
smhpnuaa 2002-10-16
  • 打赏
  • 举报
回复
如果你认为编程全是你的for循环,那你的水平还低的很啊!

用汇编写程序吧,不要用vc了,vc和汇编比,不仅编译的程序大,而且执行效率低啊!
smhpnuaa 2002-10-16
  • 打赏
  • 举报
回复
Java更慢,但是现在的情况呢?呵呵,这三个工具已经被java彻底打败了!

中国人就喜欢把一些东西放在一起比,搞排行,分析来分析去水平还是那么高?

觉得慢,你可以自己写编译器啊,国外的编译器多如牛毛,国内呢?垃圾!
windindance 2002-10-16
  • 打赏
  • 举报
回复
M$从borland挖了多少人过去……
加载更多回复(4)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧