循环访问文档页面
在处理分析、识别或合成结果时,您可能需要循环访问文档页面以及页面的块。在此情况下,您应该考虑到当请求查看或编辑文档元素(例如,页面或块)时,其数据会被载入内存并会一直保留到被显式卸载。这可能会导致“内存不足”的错误。要防止这种情况,请遵循以下建议。
循环访问文档页面
使用 FRDocument 对象的处理方法时,布局和图像文档 可以自动保存 到磁盘,这取决于 PageFlushingPolicy 属性的所选值。
但是如果您请求查看或编辑文档页面及其块,数据将不会自动卸载或保存。如果正在查看或编辑多个页面,则应在完成对每个页面的处理后卸载数据。这意味着您应该调用 FRPage 对象的 Flush 方法,如果使用 .NET,则需额外调用 GC.Collect 和 GC.WaitForPendingFinalizers。
另一方面,如果在循环访问页面时做了一些更改,您应该调用 Flush 方法来保存这些更改。否则,如果您调用 SaveToFolder 或相应的一种 FRDocument 导出方法等,您的更改将被保存到文件夹中(或导出的文档),但会将其从正在处理的对象中清除。
注:Flush 行为方法取决于 IFRDocument::PageFlushingPolicy 属性的值。如果 PageFlushingPolicy 的值是 PFP_FlushToDisk,调用方法会卸载布局和图像文档,但会将其保存到磁盘。如为 PFP_Auto,若文档超过 30 页,调用方法卸载数据,但将其保存到磁盘;否则,数据将保留在内存中。如为 PFP_KeepInMemory,则此数据不会被卸载。当您在一个解决方案中既处理小文档又处理大文档时,这会很方便,因为您可以使用同一代码进行处理。
C# 代码
C++ (COM) 代码
另请参阅
17.09.2024 15:14:41