小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

慶祝Lazarus1.0發(fā)布!Delphi和Freepascal的性能比較例子

 quasiceo 2012-11-30
慶祝Lazarus1.0發(fā)布!Delphi和Freepascal的性能比較例子

好久沒有關(guān)注freepascal和lazarus,前兩天一看,lazarus居然已經(jīng)發(fā)布了1.0正式版,下載了一個windows版,一試,感覺比較爽,IDE好像已經(jīng)強過DELPHI7(我一直用DELPHI7),中文的問題好像已經(jīng)沒有了。有關(guān)生成的可執(zhí)行的文件太大的問題也試了一下,缺省的文件還是比較大的。試了它里面的幾個例子,都是十幾兆,把編譯開關(guān)重新調(diào)整了一下,一個是除去調(diào)試信息,一個是作SMARTLINK,大小減少到2兆多,可以接受。不過有調(diào)試信息也是有意義的,出了問題可以知道是程序哪一行有問題。
我原來看過幾年前有人寫過的一篇關(guān)于DELPHI和Freepascal的性能比較文章,說是DELPHI比Freepascal快差不多10-30%,在有數(shù)學函數(shù)的運算中,差距超過30%,但昨天我作的測試結(jié)果完全顛覆了這個說法。在我的測試中發(fā)現(xiàn)除了顯示部分,F(xiàn)reepascal性能已經(jīng)超過了DELPHI。
現(xiàn)在我把我昨天晚上作的關(guān)于DELPHI和freepascal的幾個性能測試例子發(fā)布一下:

(1)平衡二叉樹的創(chuàng)建

const
 cBase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
 cBase64Len=Length(cBase64);

procedure TForm1.Button1Click(Sender: TObject);
var
 i:Integer;
 Node:TAVLTreeNode;
 Image:TImage;
 T1,T2:TDateTime;
begin
 T1:=Now;

 Tree.Clear;

 RandSeed:=1;

 DrawCount:=1;

 for i:=1 to 20*10000 do
 begin
  DrawCount:=(DrawCount+1) mod 2;
  Image:=TImage(FindComponent('Image'+IntToStr(DrawCount+1)));
//  Image.Canvas.FillRect(Image.ClientRect);
//  Tree.DrawTreeNode(Image.Canvas);

  Node:=TAVLTreeNode.Create;
  Node.Key:=cBase64[Random(cBase64Len)+1];
//  ShowMessage('Button1: Begin'+IntToStr(i)+' '+Node.Key);
  Tree.Add(Node);
  DrawCount:=(DrawCount+1) mod 2;

  Image:=TImage(FindComponent('Image'+IntToStr(DrawCount+1)));
//  Image.Canvas.FillRect(Image.ClientRect);
//  Tree.DrawTreeNode(Image.Canvas);

//  ShowMessage('Button1: End'+IntToStr(i));
 end;
 T2:=Now;
 ShowMessage(IntToStr(Round((t2-t1)*24*3600*1000)));
end;

擔心random產(chǎn)生不同的結(jié)果,我自己寫了一個隨機數(shù)發(fā)生函數(shù),保證DELPHI和FREEPASCAL都產(chǎn)生相同的樹。

運行結(jié)果是:
DELPHI耗時234ms
Freepascal耗時141ms


(2)平衡二叉樹的釋放和創(chuàng)建
把上面的代碼再執(zhí)行一篇,相當于把上次的創(chuàng)建的樹釋放,然后重新創(chuàng)建一遍
第二次運行的是
DELPHI耗時328ms
Freepascal耗時187ms

(3)平衡二叉樹的查找
var
 s:string;
 i:Integer;
 T1,T2:TDateTime;
begin
 T1:=Now;
 for i:=1 to 1000*1000 do
 begin
  s:=cBase64[Random(cBase64Len)+1];
  Tree.Find(s);
 end;
 T2:=Now;
 ShowMessage(IntToStr(Round((t2-t1)*24*3600*1000)));
end;

DELPHI耗時218ms
Freepascal耗時141ms

(4)數(shù)學運算
var
 s:string;
 i:Integer;
 T1,T2:TDateTime;
begin
 T1:=Now;
 for i:=1 to 1000*1000 do
 begin
  RandSeed:=round(math.power(10.5,3.2)+log10(1000*25*123)+sqrt(22*55)+math.sinh(1.2)*100)*100;
//  s:=cBase64[Random(cBase64Len)+1];
//  Tree.Find(s);
 end;
 T2:=Now;
 ShowMessage(IntToStr(Round((t2-t1)*24*3600*1000)));
end;


DELPHI耗時235ms
Freepascal耗時218ms


(5)在畫布上顯示
var
 i:Integer;
 Node:TAVLTreeNode;
 Image:TImage;
 T1,T2:TDateTime;
begin
 T1:=Now;

 Tree.Clear;

 RandSeed:=1;

 DrawCount:=1;

 for i:=1 to 200 do
 begin
  DrawCount:=(DrawCount+1) mod 2;
  Image:=TImage(FindComponent('Image'+IntToStr(DrawCount+1)));
  Image.Canvas.FillRect(Image.ClientRect);
  Tree.DrawTreeNode(Image.Canvas);

  Node:=TAVLTreeNode.Create;
  Node.Key:=cBase64[Random(cBase64Len)+1];
//  ShowMessage('Button1: Begin'+IntToStr(i)+' '+Node.Key);
  Tree.Add(Node);
  DrawCount:=(DrawCount+1) mod 2;

  Image:=TImage(FindComponent('Image'+IntToStr(DrawCount+1)));
  Image.Canvas.FillRect(Image.ClientRect);
  Tree.DrawTreeNode(Image.Canvas);

//  ShowMessage('Button1: End'+IntToStr(i));
 end;
 T2:=Now;
 ShowMessage(IntToStr(Round((t2-t1)*24*3600*1000)));
end;


DELPHI耗時312ms
Lazarus耗時688ms

以上使用的DELPHI版本是 Lite Edition v7.3.4.1(Build8.1),FreePascal版本是2.6

總結(jié):Freepascal在編譯效果上基本上不輸DELPHI,并且還強不少,并且Freepascal已經(jīng)64位很長時間了,特別是在多種硬件平臺和多種操作系統(tǒng)上都能編譯運行。不過DELPHI7在畫布上的顯示速度明顯超過Lazarus,這可能是因為Lazarus支持多種顯示平臺(win32、gtk、gtk2、carbon、qt、wince、fpgui、cocoa、android),多包了一層。lanzarus上的基本控件和DELPHI相比,有多有少??梢哉flazarus可以進入實用階段了。

以后有一部分程序可能會考慮用Lanzarus進行開發(fā)。有可能會和DELPHI混用。至少服務(wù)器肯定考慮用Freepascal了,因為Freepascal原生提供了比DELPHI原生提供多得多的大量的函數(shù)和組件(包括我上面使用的平衡二叉樹就是一個例子,其它還有鏈表,雜湊、加密、壓縮、CGI等),并且寫服務(wù)器軟件,有關(guān)DELPHI代碼轉(zhuǎn)到Freepascal代碼比較容易。DELPHI上大量的第三方比較好的報表和顯示控件要轉(zhuǎn)到Lazarus還是不太容易,如果不考慮第三方控件,Lazarus已經(jīng)完全可以替換Delphi了,但這些優(yōu)秀的第三方顯示和報表控件還是很難割舍的。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多