Observer 님이 쓰신 글 :
: 안녕하세요.
: graphics32를 이것저것 테스트해보고 있는중에,
: 아래와 같은 코드를 실행하면 레이어 갯수가 5천개일때 out of memory 에러가 발생합니다.
: 4950개까지는 잘됩니다.
: 이미지를 작은거, 큰거 다 테스트해봐도 레이어 생성 갯수 제한이 있는지
: 에러가 발생하네요.
: 5만개 정도까지 레이어 생성이 필요한데 어떻게 수정하면 될까요?
:
: /////// header
: std::map<String, std::unique_ptr<TBitmapLayer>> mpLayer;
:
: /////// cpp
: std::unique_ptr<TPngImage> png{new TPngImage};
: png->LoadFromFile("test.png");
: Image32->BeginUpdate();
: for (int i = 0; i < 5000; i++) { // 이미지 크기에 관계없이 4950개까지는 가능, 5000개로 하면 에러 발생
: String n = IntToStr(i);
: mpLayer[n] = std::make_unique<TBitmapLayer>(Image32->Layers);
: mpLayer[n]->Bitmap->DrawMode = dmBlend;
: mpLayer[n]->Bitmap->Assign(nullptr);
: mpLayer[n]->Bitmap->SetSize(png->Width, png->Height);
: mpLayer[n]->Bitmap->Canvas->Draw(0,0,png.get());
: TFloatRect fr;
: fr.Left = Random(Image32->Width);
: fr.Top = Random(Image32->Height);
: fr.Right = png->Width + fr.Left;
: fr.Bottom = png->Height + fr.Top;
: mpLayer[n]->Location = fr;
: }
: Image32->EndUpdate();
: Image32->Invalidate();
:
:
답변:
델파이로 만들어진 컴포넌트들은 Demand Load 방식을 사용해서 구현되어 있지 않고...
거의 모든 컴포넌트들이 시스템 리소스를 무식하게 사용하는 구조로 구현되어 있습니다.
컴포넌트에 의존하지 말고 Demand Load 방식으로 직접 만들어서 사용하세요.
|