在VC与Delphi上测试速度的代码很简单,如下:
//Delphi代码//////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
  dc : HDC;
  dw :DWORD;
  i  :integer;
begin
  dw:=GetTickCount();  dc:=GetDc(self.Handle);
  for i:=0 to 500 do
  begin
Ellipse(dc,i,10,200,120);
Ellipse(dc,i,120,200,250);
TextOut(dc,i,250,'123456789',10);
  end;
  ReleaseDc(self.Handle, dc);  dw:=GetTickCount()-dw;
  ShowMessage('运行时间:'+Inttostr(dw));
end;
//VC代码/////////////////////////////////////////////
void CFileDlg::OnButton1() 
{
char buffer[20];
DWORD dw;
dw=::GetTickCount(); HDC dc=::GetDC(this->m_hWnd);
for(int i=0;i<=500;i++)
{
::Ellipse(dc,i,10,200,120);
::Ellipse(dc,i,120,200,250);
::TextOut(dc,i,250,"123456789",10);
}
::ReleaseDC(this->m_hWnd,dc); dw=::GetTickCount()-dw;
sprintf(buffer,"运行时间:%d\n",dw);
::MessageBox(this->m_hWnd,buffer,"OK",1);
}
在DELPHI5中我全部用API的方法写了一个窗口程序在这个窗口中执行速度是与VC6相同的,我想可能是VCL窗口的某些内部机制影响了绘图速度,请大家帮忙研究一下。

解决方案 »

  1.   

    delphi 的内存释放比较慢,你可以把你的代码改成这样,他们的速度就会差不多了
    在VC与Delphi上测试速度的代码很简单,如下:
    //Delphi代码//////////////////////////////////////////
    procedure TForm1.Button1Click(Sender: TObject);
    var
      dc : HDC;
      dw :DWORD;
      i  :integer;
    begin
      dc:=GetDc(self.Handle);
      dw:=GetTickCount();
      for i:=0 to 500 do
      begin
    Ellipse(dc,i,10,200,120);
    Ellipse(dc,i,120,200,250);
    TextOut(dc,i,250,'123456789',10);
      end;
      dw:=GetTickCount()-dw;
      ReleaseDc(self.Handle, dc);
      ShowMessage('运行时间:'+Inttostr(dw));
    end;
    //VC代码/////////////////////////////////////////////
    void CFileDlg::OnButton1() 
    {
    char buffer[20];
    DWORD dw;
    HDC dc=::GetDC(this->m_hWnd);
    dw=::GetTickCount();
    for(int i=0;i<=500;i++)
    {
    ::Ellipse(dc,i,10,200,120);
    ::Ellipse(dc,i,120,200,250);
    ::TextOut(dc,i,250,"123456789",10);
    }
    dw=::GetTickCount()-dw;
    ::ReleaseDC(this->m_hWnd,dc);
    sprintf(buffer,"运行时间:%d\n",dw);
    ::MessageBox(this->m_hWnd,buffer,"OK",1);
    }