아무도 답변이 없네요
delphi 컴파일러가 좋다는 얘기는 들었지만.
asm 코드를 봐도 (asm볼줄은 모름) 라인수는 비슷한데 왜그렇게 속도 차이가 많이 나는것인지?
아래 코드 한줄을 100만번 이상 돌려보니 bcb와 delphi와 속도 차이가 확연히 나더군요
R=((MainR*XBoganValue)+(0xFF*(1-XBoganValue)))*(1-YBoganValue);
//-----bcb------------------------------------
MainR=(MainCol >> 16) & 0xFF;
XBoganValue=0.5;
YBoganValue=0.5;
iTic1=timeGetTime();
for( iY=0 ; iY<1421511 ;iY++)
{
//R=( 255 - XBoganValue *( 255-MainR) )*YRVal;
R=((MainR*XBoganValue)+(0xFF*(1-XBoganValue)))*(1-YBoganValue);
}
iTic2=timeGetTime();//GetTickCount();
ShowMessage(IntToStr(iTic2-iTic1));
//--------delphi---------------------------------
MainB:= MainCol and $FF;
XBoganValue:=0.1;
YBoganValue:=0.4;
iTic1 := GetTickCount;
for iY:=0 to 1421510 do
begin
R:=Trunc(((MainR*XBoganValue)+($FF*(1-XBoganValue)))*(1-YBoganValue));
end;
iTic2 := GetTickCount;
ShowMessage(IntToStr(iTic2-iTic1));
bcb에서 콘솔로 coding해도 마찬가지로 느리고
MS의 VC++로 코딩해도 BCB랑 비슷하고
DELPHI가 확실히 빠르더군요
BCB가
c , c++ 언어로써 low한 코딩이 가능하고
또 개발도 빠르게 할수 있고
bcb가 그어떤 개발툴보다 낳다고 생각하는 bcb 신봉자 였는데
실망이 이만 저만 아니네요
장성호 님이 쓰신 글 :
: 안녕하세요
:
: 델마당 강좌,팁 정보 게시판에 조무영님께서 올려놓으신 "[팁] 색상 선택하기" 샘플코드를
: c++ Builder 바꿔보았습니다.
:
:
http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?mode=vote&num=4718&db=dmdlec3&backdepth=2
:
:
: 그런데
: 색상파렛트를 만드는 함수를
: delphi와 거의 똑같이 만들었다고 생각되는데
:
: GetTickCout로 시간을 계산해보면
: Delphi가 두배이상 빠릅니다.
:
: 왜그런것이지 모르겟네요
:
:
: [조무영님의 delphi코드]
:
: procedure TMain.ColImageUpdate(MainCol: TColor);
: type
: PDWORDArray = PIntegerArray;
: var
: iX, iY, XMax, YMax: Integer;
: R, G, B, MainR, MainG, MainB: Byte;
: XBoganValue, YBoganValue: Single;
: P: PDWORDArray;
:
: iTic1,iTic2: Integer;
: begin
: iTic1 := GetTickCount;
:
: with ColImg do
: begin
: XMax:=Width;
: YMax:=Height;
: if Picture.Bitmap.Width <XMax then Picture.Bitmap.Width :=XMax;
: if Picture.Bitmap.Height<YMax then Picture.Bitmap.Height:=YMax;
:
: MainB:= MainCol and $FF;
: MainG:=(MainCol shr 8) and $FF;
: MainR:=(MainCol shr 16) and $FF;
:
: for iY:=0 to YMax-1 do
: begin
: P:=Picture.Bitmap.ScanLine[iY];
:
: for iX:=0 to XMax-1 do
: begin
: XBoganValue:=iX/XMax;
: YBoganValue:=iY/YMax;
: R:=Trunc(((MainR*XBoganValue)+($FF*(1-XBoganValue)))*(1-YBoganValue));
: G:=Trunc(((MainG*XBoganValue)+($FF*(1-XBoganValue)))*(1-YBoganValue));
: B:=Trunc(((MainB*XBoganValue)+($FF*(1-XBoganValue)))*(1-YBoganValue));
:
: //Canvas.Pixels[iX, iY]:=RGB(R, G, B); // 이건 느려서 못써요
: P[iX]:=(B shl 16) or (G shl 8) or R;
: end;
: end;
: iTic2 := GetTickCount;
:
: Label2.Caption := IntToStr(iTic2-iTic1);
:
: Repaint;
: end;
: end;
:
:
: [C++ Builder 변환 코드]
:
: //--------------------------------------------------------------------------
: void __fastcall TMain::ColImageUpdate(TColor MainCol )
: {
:
: int iX, iY, XMax, YMax;
: unsigned char R, G, B, MainR, MainG, MainB;
: float XBoganValue, YBoganValue;
:
: // RGBTRIPLE *pt;
: int *pt;
:
: int iTic1,iTic2;
:
: iTic1=GetTickCount();
: XMax=ColImg->Width;
: YMax=ColImg->Height;
: if ( ColImg->Picture->Bitmap->Width <XMax ) ColImg->Picture->Bitmap->Width =XMax;
: if ( ColImg->Picture->Bitmap->Height<YMax ) ColImg->Picture->Bitmap->Height=YMax;
:
: MainB= MainCol & 0xFF;
: MainG=(MainCol >> 8) & 0xFF;
: MainR=(MainCol >> 16) & 0xFF;
:
: for( iY=0 ; iY<YMax ;iY++)
: {
: pt=(int *)ColImg->Picture->Bitmap->ScanLine[iY];
:
: for( iX=0 ; iX< XMax;iX++)
: {
: XBoganValue=iX/(XMax*1.0);
: YBoganValue=iY/(YMax*1.0);
:
: R=((MainR*XBoganValue)+(0xFF*(1-XBoganValue)))*(1-YBoganValue);
: G=((MainG*XBoganValue)+(0xFF*(1-XBoganValue)))*(1-YBoganValue);
: B=((MainB*XBoganValue)+(0xFF*(1-XBoganValue)))*(1-YBoganValue);
:
: //ColImg->Canvas->Pixels[iX][iY]=RGB(R, G, B); // 이건 느려서 못써요
: //ColImg->Canvas->Pixels[iX][iY]=((B << 16) | (G << 8) | R); // 이것도 느림
:
:
: pt[iX]=((B << 16) | (G << 8) | R); //1)
: // pt[iX]=RGB(R, G, B); //2) 속도 빠름 - 1)번과 비슷함
: //결론::RGB()함수가 느린것이 아니라 ColImg->Canvas->Pixels[][] 함수가 느린것임
: // 그런데 이상하다 그렇게 해도 delphi보다 속도가 느린다 왜 그런것일까?
:
:
: }
: }
: iTic2=GetTickCount();
: Label2->Caption=IntToStr(iTic2-iTic1);
: ColImg->Repaint();
:
: }
: //-