***,vb怎么会比delphi快6秒?(100分)

  • 主题发起人 主题发起人 zhaohai9
  • 开始时间 开始时间
Z

zhaohai9

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

uses
; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
; Dialogs, ExtCtrls, StdCtrls;

type
; TForm1 = class(TForm)
; ; Button1: TButton;
; ; Label1: TLabel;
; ; Timer1: TTimer;
; ; Label2: TLabel;
; ; procedure Timer1Timer(Sender: TObject);
; ; procedure Button1Click(Sender: TObject);
; private
; ; { Private declarations }
; public
; ; { Public declarations }
; end;

var
; Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption:=timetostr(time);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin

for i:=0 to 100000 do
label2.Caption:=floattostr(i*3.14169265357932);
end;

end.



VERSION 5.00
Begin VB.Form Form1
; ;Caption ; ; ; ; = ; "Form1"
; ;ClientHeight ; ;= ; 3195
; ;ClientLeft ; ; ;= ; 60
; ;ClientTop ; ; ; = ; 345
; ;ClientWidth ; ; = ; 4680
; ;LinkTopic ; ; ; = ; "Form1"
; ;ScaleHeight ; ; = ; 3195
; ;ScaleWidth ; ; ;= ; 4680
; ;StartUpPosition = ; 3 ;'窗口缺省
; ;Begin VB.Timer Timer1
; ; ; Interval ; ; ; ;= ; 1000
; ; ; Left ; ; ; ; ; ;= ; 3420
; ; ; Top ; ; ; ; ; ; = ; 1425
; ;End
; ;Begin VB.CommandButton Command1
; ; ; Caption ; ; ; ; = ; "Command1"
; ; ; Height ; ; ; ; ;= ; 510
; ; ; Left ; ; ; ; ; ;= ; 1485
; ; ; TabIndex ; ; ; ;= ; 2
; ; ; Top ; ; ; ; ; ; = ; 2370
; ; ; Width ; ; ; ; ; = ; 1545
; ;End
; ;Begin VB.TextBox Text2
; ; ; Height ; ; ; ; ;= ; 645
; ; ; Left ; ; ; ; ; ;= ; 900
; ; ; TabIndex ; ; ; ;= ; 1
; ; ; Text ; ; ; ; ; ;= ; "Text2"
; ; ; Top ; ; ; ; ; ; = ; 1470
; ; ; Width ; ; ; ; ; = ; 1230
; ;End
; ;Begin VB.TextBox Text1
; ; ; Height ; ; ; ; ;= ; 735
; ; ; Left ; ; ; ; ; ;= ; 2070
; ; ; TabIndex ; ; ; ;= ; 0
; ; ; Text ; ; ; ; ; ;= ; "Text1"
; ; ; Top ; ; ; ; ; ; = ; 390
; ; ; Width ; ; ; ; ; = ; 1545
; ;End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub Command1_Click()
Dim i As Long
For i = 0 To 100000
; ; Text2.Text = i * 3.14169265357932
Next i
End Sub

Private Sub Timer1_Timer()
Text1.Text = Time
End Sub



为什么vb快?
 
可这有什么关系呢?
 
能说明什么问题??
 
换一种方法测吧
 
怎么vb编译的比delphi编译出来的运算还快?为什么?
 
并非vb编译的比delphi编译出来的运算还快,这还受系统的很多因素的影响,

这样的程序,即使是VB编的exe运行10次,速度肯定不同,而且会相差很大。

速度、效率不是这样测的!
 
你的机子问题 ; :D
 
呵呵,各门语言有各自的优点吧,要不然每门语言也都不活到现在了。
 
能说明什么问题??
 
我就想知道,为什么vb的快?语句是一样的啊。
 
是不是因为类型转换的原因啊!
 
delphi :
for i:=0 to 100000 do
e:=i*3.14169265357932;
end;
label2.Caption:=floattostr(E);

For i = 0 To 100000
; ; e = i * 3.14169265357932
Next i
Text1.text=e;

重新测试一下问题可能出在数据类型转换上!
 
呵呵,正常!
因为你这个循环,就算VB是解释语言,这个循环解释器仅仅解释一次,然后就执行了。
而对于Delphi来说,一个FloatToStr他需要判断很多异常了什么的,所以耽误时间
(我不知道VB如何防止,但是有一个好的证据是VB一旦出错,如果没有处理,默认就退出
整个进程。所以他的防止出错的处理应该是很差的,做的差的好处就是时间浪费少了)

不过,不知道这两个相差的6秒在百分比上相差多少?6秒仅仅是感性的认识,拿出具体相差的百分比来!
 
to yzhshi:
是这样吗?有点怀疑!
 
这有什么奇怪的
 
重新写过:
delphi :
for i:=0 to 100000 do
e:=i*3.14169265357932;
end;
label2.Caption:=floattostr(E);

For i = 0 To 100000
; ; e = i * 3.14169265357932
Next i
Text1.text=e;
问题不是出在类型转换上,
而是caption := ''''这样会触发大量的重绘事件,
不是你用的vb和delphi的版本是多少,自从vb5以后,delphi的优势就不是那么明显了。
 
同意战鹰
 
编译速度一定是Delphi更快,这是无人质疑的!
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
690
import
I
I
回复
0
查看
726
import
I
I
回复
0
查看
625
import
I
S
回复
0
查看
764
SUNSTONE的Delphi笔记
S
后退
顶部