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
[49018] Re:Re:델파이와 bcb 코드에 속도차이 - bcb가 delphi보다 못하단 말인가?
잿빛날개 [ashywings] 1578 읽음    2007-04-23 04:40
소스코드를 열어보니 디버그 모드로 컴파일 하신거 같네요.
릴리즈 모드로 바꾸고 다시 테스트해 보세요.
그래야 제 속도가 나옵니다.


장성호 님이 쓰신 글 :
: 아무도 답변이 없네요
: 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 코드에 속도차이 ??? 장성호 1470 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보다 못하단 말인가? 잿빛날개 1578 2007/04/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.