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
[49027] Re:델파이와 bcb 코드에 속도차이 ???
쥐르미온 [] 2077 읽음    2007-04-23 17:29
저도 여기서 지나가다 본건데요.

델파이는 1 to 300 이런식으로 처음과 끝을 정하는 방식이기 때문에
C++의 for문과 속도 차이가 납니다.
델파이는 단순히 숫자를 더해주고 넘어가는 방식이지만,
C++의 for문은 초기조건, 종료조건, 진행수식 세 가지를 마음대로 설정할 수 있기 때문이죠.
단순한 숫자하나 증가 방식이 아니란 말이지요.

C++에서도 델파이에서 이루어지는 방식과 비슷하게 코드를 바꾸면
델파이와의 속도 차이가 매우 적어지거나 델파이보다 빨라질 것 같네요.

for(int i=0; i<30; i++)
이런 구문을
for(int i=30; i--; )
이와같이 바꿔주시면 됩니다.

이와 관련된 글이 이미 있으니 검색해보시는 것도 좋으실 듯 합니다.

장성호 님이 쓰신 글 :
: 안녕하세요
:
: 델마당 강좌,팁 정보 게시판에 조무영님께서 올려놓으신   "[팁] 색상 선택하기"   샘플코드를  
: 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보다 못하단 말인가? 장성호 1601 2007/04/20
49018         Re:Re:델파이와 bcb 코드에 속도차이 - bcb가 delphi보다 못하단 말인가? 잿빛날개 1579 2007/04/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.