소스코드를 열어보니 디버그 모드로 컴파일 하신거 같네요.
릴리즈 모드로 바꾸고 다시 테스트해 보세요.
그래야 제 속도가 나옵니다.
장성호 님이 쓰신 글 :
: 아무도 답변이 없네요
: 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();
: :
: : }
: : //-