메인 콘텐츠로 건너뛰기
분석, 인식 또는 합성 결과를 다룰 때는 문서 페이지와 해당 페이지의 블록을 순회해야 할 수 있습니다. 이 경우, 보기 또는 편집을 위해 문서 요소(예: 페이지나 블록)를 요청하면 해당 데이터가 메모리에 로드되고 명시적으로 언로드할 때까지 메모리에 유지된다는 점에 유의해야 합니다. 이로 인해 “메모리 부족” 오류가 발생할 수 있습니다. 이를 방지하려면 아래 권장 사항을 따르세요.

문서 페이지 순회

FRDocument 객체의 처리 메서드를 사용하면 Linux와 macOS에서는 레이아웃과 이미지 문서가 자동으로 디스크로 언로드됩니다. Windows에서는 레이아웃과 이미지 문서를 자동으로 디스크에 저장할 수 있지만, 이 동작은 선택한 PageFlushingPolicy 속성 값에 따라 달라집니다. 하지만 보기 또는 편집을 위해 문서의 페이지와 해당 블록을 요청하면 데이터는 자동으로 언로드되거나 저장되지 않습니다. 여러 페이지를 보거나 편집하는 경우에는 각 페이지 작업을 마친 후 해당 데이터를 언로드해야 합니다. 즉, FRPage 객체의 Flush 메서드를 호출해야 합니다.
Windows에서 .NET으로 작업하는 사용자는 GC.Collect 및 GC.WaitForPendingFinalizers도 호출해야 합니다.
반면 페이지를 반복 처리하는 동안 일부 내용을 변경하는 경우에는 이러한 변경 사항을 저장하기 위해 Flush 메서드를 호출해야 합니다. 그렇지 않으면 예를 들어 해당 FRDocumentSaveToFolder 메서드나 내보내기 메서드 중 하나를 호출할 때 변경 사항은 폴더(또는 내보낸 문서)에 저장되지만, 현재 작업 중인 객체에서는 사라집니다. Windows에서 Flush 메서드의 동작은 IFRDocument::PageFlushingPolicy 속성 값에 따라 달라집니다. PageFlushingPolicy 값이 PFP_FlushToDisk이면 메서드를 호출할 때 레이아웃과 이미지 문서가 디스크로 언로드됩니다. 값이 PFP_Auto이면 문서가 30페이지를 초과할 경우 메서드 호출 시 데이터가 디스크로 언로드되고, 그렇지 않으면 데이터는 메모리에 유지됩니다. 값이 PFP_KeepInMemory이면 데이터는 언로드되지 않습니다. 따라서 하나의 솔루션에서 작은 문서와 큰 문서를 모두 처리할 때도 동일한 처리 코드를 사용할 수 있어 편리합니다.

Windows 예제

FREngine.IFRPages pages = document.Pages;
int pagesCount = pages.Count;
for (int i = 0; i < pagesCount; i++)
{
 FREngine.IFRPage page = pages.Item(i);
 // 페이지를 순회하며 블록, 단락, 문자 처리
 iteratePage(page);
 // 페이지에서 참조되지 않는 모든 객체를 해제하도록 가비지 컬렉터 강제 실행
 GC.Collect();
 GC.WaitForPendingFinalizers();
 // 사용하지 않는 페이지 데이터 로드 해제
 // iteratePage()에서 페이지가 변경된 경우 변경 사항을 유지하려면 Flush(true) 호출
 page.Flush(true);
 // 변경 사항을 유지할 필요가 없으면 Flush(false) 호출
 // page.Flush(false);
}
FREngine::IFRPagesPtr pages = document->Pages;
int pagesCount = pages->Count;
for( int i = 0; i < pagesCount; i++ ) {
 FREngine::IFRPagePtr page = pages->Item( i );
 // 페이지를 순회하며 블록, 단락, 문자 처리
 iteratePage( page );
 // 사용하지 않는 페이지 데이터 로드 해제
 // iteratePage()에서 페이지가 변경된 경우 변경 사항을 유지하려면 Flush( true ) 호출
 page->Flush( true );
 // 변경 사항을 유지할 필요가 없으면 Flush(false) 호출
 // page->Flush( false );
}
참고 항목 FRDocument 텍스트 작업하기