델파이를 사용하는 홍진혁입니다.
다름아니고, A 포인터에서 B 포인터로 C 바이트만큼 복사를 하려고 하는데
CopyMemory(B, A, C)를 사용하였습니다.
그런데, CopyMemory함수의 속도를 잘 모르겠습니다.
어떤 분은 Move()가 비슷한 기능을 하는데 속도는 아주 느리다고 하구요.
C에서 memcpy() 함수는 몇백만 Byte를 복사하는데 시간이 거의 몇 msec 정도 걸립니다.
혹시 CopyMemory()는 어느정도 속도가 걸리는지 경험해 보신분 계십니까????
> 델파이를 사용하는 홍진혁입니다.
>
> 다름아니고, A 포인터에서 B 포인터로 C 바이트만큼 복사를 하려고 하는데
> CopyMemory(B, A, C)를 사용하였습니다.
>
> 그런데, CopyMemory함수의 속도를 잘 모르겠습니다.
> 어떤 분은 Move()가 비슷한 기능을 하는데 속도는 아주 느리다고 하구요.
> C에서 memcpy() 함수는 몇백만 Byte를 복사하는데 시간이 거의 몇 msec 정도 걸립니다.
> 혹시 CopyMemory()는 어느정도 속도가 걸리는지 경험해 보신분 계십니까????
>
직접 만들어 보시면 금방 알수 있을텐데요..
uses
mmSystem;
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
StartTime : DWORD;
Elapsed : DWORD;
SourBuf : array[0..10000] of byte;
DestBuf : array[0..10000] of byte;
begin
StartTime := timeGetTime;
for i := 0 to 100000 do begin
CopyMemory( @DestBuf, @SourBuf, 10000 );
end;
Elapsed := timeGetTime - StartTime;
ShowMessage( IntToStr( Elapsed ) );
StartTime := timeGetTime;
for i := 0 to 100000 do begin
Move( SourBuf, DestBuf, 10000 );
end;
Elapsed := timeGetTime - StartTime;
ShowMessage( IntToStr( Elapsed ) );
end;
이것을 실행 해보면 어느것이 얼만큼 빠른지 알 수 있을 겁니다..
그리고..
#include "windows.h"
#include "mmsystem.h"
int main(int argc, char* argv[])
{
int i;
DWORD StartTime, Elapsed;
char SourBuf[10000], DestBuf[10000];
StartTime = timeGetTime();
for ( i = 0; i < 100000; i++ )
{
memcpy( DestBuf, SourBuf, 10000 );
}
Elapsed = timeGetTime() - StartTime;
printf( "memcpy : %d msecn", Elapsed );
StartTime = timeGetTime();
for ( i = 0; i < 100000; i++ )
{
CopyMemory( DestBuf, SourBuf, 10000 );
}
Elapsed = timeGetTime() - StartTime;
printf( "CopyMemory : %d msecn", Elapsed );
return 0;
}
이 소스를 실행하면 VC++ 에서 memcpy 와 CopyMemory 의
속도도 비교 하실 수 있을 겁니다..
참고로 제 PC 에서는 같은 Win32 API 인 CopyMemory 라고 하더라도
VC++6.0 에서는 10000 * 100000 bytes 복사하는데 2866 msec 이고..
Delphi 3.0 에서는 3747 msec 가 걸렸습니다..
호출 방식도 같은데.. Delphi 가 1.3 배 더 많이 걸리죠 ?
이 이유는 숙제입니다....