|
: int nCount = 100000 * 10;
: for (int nLen = 0; ii < nCount; nLen+=10)
: {
: pAlloc = (char*)::HeapReAlloc(hProc, NULL, pAlloc, nLen+10);
: ::CopyMemory(pAlloc+nLen, pAdd, 10);
: }
:
: ::HeapFree(hProc, NULL, pAlloc);
:
제가 AnsiString을 만든다면 이런식으로 복사하지는 않을듯 합니다.
즉 10문자 길이의 문자열을 붙일때마다 Memory를 재 할당 하지는 않을거란 얘기죠
메모리를 무조건 늘리는것이 아니라
정해지 사이즈 만큼 순차적으로 필요할때 증가 하면 훨씬더 빠르지 않을까요?
즉 처음 문자열을 저장할때 100바이트 정도 확보하고
그다음 10번 루프 도는 동안은 이미 할당한 메모리가지고 계속 복사만 해주고
다음 메모리가 부족하면 또 100바이트 정도 메모리 확보하는 방식으로 만들면
속도가 빠를꺼 같은데요.
int nCount = 100000 * 10;
int iHeapSize = 0;
for(int nLen=0; nLen<nCount; nLen+=10)
{
if(iHeapSize < nLen+10)
{
iHeapSize += 100;
pAlloc = (char*)::HeapReAlloc(hProc, NULL, pAlloc, iHeapSize);
}
::CopyMemory(pAlloc+nLen, pAdd, 10);
}
대충 이렇게 하면 ReAlloc호출이 줄어들지 않을까 합니다..
|