2010-07-02 26 views
8

tôi đã thử nghiệm một vài đoạn chuẩn trên Delphi như thế này một:Chuyển từ gỡ lỗi sang cấu hình phát hành không ảnh hưởng đến hiệu suất?

uses 
..., Diagnostics; 

procedure TForm2.Button1Click(Sender: TObject); 
var 
    i,elapsed: integer; 
    stopwatch: TStopwatch; 
    ff: textfile; 
begin 
    if FileExists('c:\bench.txt') then 
     DeleteFile('c:\bench.txt'); 

    stopwatch := TStopwatch.create; 
    stopwatch.Reset; 
    stopwatch.Start; 

    AssignFile(ff,'c:\bench.txt'); 
    Rewrite(ff); 

    for I := 1 to 999000 do 
     write(ff,'Delphi programmers are ladies men :D'); 

    CloseFile(ff); 
    stopwatch.Stop; 
    elapsed := stopwatch.ElapsedMilliseconds; 
    ShowMessage(inttostr(elapsed));  
end; 

Nó không quan trọng nếu tôi chạy/biên dịch theo debug hoặc release cấu hình kết quả là khoảng 900. Khi tôi chuyển từ debug để release trong Visual Studio (cho cả C++ và C#) chương trình của tôi trở thành ma thuật nhanh hơn. Tôi đang sử dụng Delphi 2010 và tôi kích hoạt cấu hình phát hành từ quản lý dự án cũng như dự án -> quản lý cấu hình và thậm chí dự án -> tùy chọn -> Delphi trình biên dịch nhưng không có hiệu lực tại sao ??

Nếu vấn đề quan trọng: Tôi đang sử dụng Windows XP, tôi có RAM 1 GB và CPU Intel Core2.

+9

Có lẽ đó là cách khác. Chuyển sang Debug trong Visual Studio làm cho các chương trình của bạn trở nên kỳ diệu * chậm hơn *. Sử dụng Delphi, nó không. :) –

+1

có rất đúng, gỡ lỗi phát hành của delphi chạy nhanh hơn cả C++ và C# :) –

Trả lời

16
  1. Bạn đã kiểm tra, cấu hình khác nhau như thế nào? Ngay cả khi họ có tên như RELEASE hoặc DEBUG, họ có thể cấu hình đầy đủ. Bạn thậm chí có thể cấu hình chúng theo cách khác.

  2. Mã bạn đang định thời gian chủ yếu là I/O liên quan. Vì vậy, hãy chắc chắn rằng các kiểm tra IO được tắt trong cấu hình RELEASE.

  3. Delphi vẫn tạo ra mã nhanh ngay cả khi sửa lỗi;)

+2

+1 cho "kiểm tra tệp kết nối". 1 cho "chủ yếu là I/O có liên quan". 1 cho "delphi tạo mã nhanh" ... @omair: nếu bạn muốn thấy sự khác biệt về tốc độ giữa gỡ lỗi và phát hành, hãy làm điều đó trên một số doe chuyên sâu về CPU. Mã của bạn là một điểm chuẩn cho ổ cứng, bạn sẽ nhận được về cùng một thời gian bằng cách sử dụng bất kỳ ngôn ngữ lập trình, từ perl để python, từ lắp ráp để tập tin batch cửa sổ. –

+0

@ uwe raabe 1. cách cấu hình cấu hình? Tôi mới vào thế giới lập trình và không có ý tưởng, bạn có thể trỏ đến một hướng dẫn tốt về điều này 2.i chạy này i/o mã liên quan trong visualstudio cho c + + và C# và kết quả là khác nhau. 3.yep tôi biết delphi là tốt nhất, đó là lý do tại sao nó có một đội ngũ lập trình trung thành :) @ cosmin prund KHÔNG có kết quả khác nhau cho các ngôn ngữ khác dưới debug: delphi là nhanh nhất, C++ 2nd và C# chậm nhất và đang được phát hành : C++ nhanh nhất, delphi 2 và C# vẫn chậm nhất –

+0

http://docwiki.embarcadero.com/RADStudio/en/Build_Configurations_Overview –

10

Ngoài những gì Uwe nói, chắc chắn rằng bạn làm một "Xây dựng" sau khi chuyển đổi cấu hình. Thực hiện biên dịch đơn giản hoặc chạy ứng dụng sẽ không biên dịch lại tất cả các đơn vị có cài đặt mới.

Giống như những người nhận xét khác, tôi cũng sẽ không mong đợi quá nhiều sự khác biệt giữa hai cấu hình cho điểm chuẩn được sử dụng. Các nút cổ chai thực sự là I/O và rất có thể sẽ mất cân bằng bất kỳ sự khác biệt hiệu suất giữa DEBUG và RELEASE.

Cuối cùng, gỡ lỗi trong Delphi không chỉ chậm hơn nhiều so với Bản phát hành bản phát hành. Heck, đôi khi tôi chạy Outlook trong trình gỡ lỗi cho hầu hết các ngày (tôi đang phát triển Outlook addins) mà không nhận thấy bất kỳ sự khác biệt hiệu suất có thể nhận biết.

+0

không chỉ về điểm chuẩn này, cho bất kỳ điểm chuẩn nào tôi chạy dưới gỡ lỗi delphi và phát hành thực hiện hầu như giống hệt nhau, trong điểm chuẩn chủ yếu là delphi nhanh hơn nhiều so với C# nhưng hơi chậm hơn C/C++ (tôi đang nói về cấu hình phát hành ở đây) –

5

Đó là một trường hợp thử nghiệm xấu mà tôi nghĩ. Tất cả những gì bạn làm là ghi vào một tệp, có nghĩa là phần lớn thời gian được sử dụng trong mã Windows, không phải trong mã Delphi của bạn, và do đó cài đặt trình biên dịch sẽ không ảnh hưởng đáng kể đến tổng thời gian thực hiện

3

Không có gì trong mã chính của bạn số lượng lớn:

for I := 1 to 999000 do 
    write(ff,'Delphi programmers are ladies men :D'); 

yêu cầu kiểm tra vất vả. Lựa chọn của bạn là:

  • Phạm vi kiểm tra
  • Overflow kiểm tra
  • I/O kiểm tra

Trong số những ba, chỉ I/O kiểm tra sẽ được áp dụng, và đó có lẽ là tương đương thêm:

for I := 1 to 999000 do 
begin 
    hresult := Write(ff, 'Dephi programmers are ladies men :D'); 
    if hresult < 0 then 
     raise EIOException.Create('That''s what your mom told me, in bed.'); 
end; 

CMPJNE Hướng dẫn CPU không quá phức tạp.Họ đang bị lùn bằng cách ghi vào ổ đĩa cứng.

Nó chạy nhanh như vậy vì nó nhanh.

Các vấn đề liên quan