C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[49011] Re:델파이와 bcb 코드에 속도차이 - bcb가 delphi보다 못하단 말인가?
장성호 [nasilso] 1600 읽음    2007-04-20 20:18
아무도 답변이 없네요
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();
:
: }
: //-

+ -

관련 글 리스트
48994 델파이와 bcb 코드에 속도차이 ??? 장성호 1471 2007/04/19
49027     Re:델파이와 bcb 코드에 속도차이 ??? 쥐르미온 2077 2007/04/23
49011     Re:델파이와 bcb 코드에 속도차이 - bcb가 delphi보다 못하단 말인가? 장성호 1600 2007/04/20
49018         Re:Re:델파이와 bcb 코드에 속도차이 - bcb가 delphi보다 못하단 말인가? 잿빛날개 1579 2007/04/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.