我注意到,当我在大型 PDF 中搜索时,应用程序的内存使用量会增加,因为 PDFKit 正在执行一些内部搜索缓存。有什么办法可以控制这个缓存大小吗?就我而言,搜索完成后缓存内存会增加超过 500 MB。
为了在 PDF 文档中进行搜索,我使用了:
func beginFindString(_ string: String, withOptions options: NSString.CompareOptions = [])
感谢您的意见。要求是在客户端的 PDF 中进行搜索。就我而言,PDF 大约有 300 页,其中还包含图像。
搜索完成后,内存使用量并没有下降一点,直到 PDFDocument 被释放为止。当包含 PDFView 的屏幕被关闭时,通常会发生这种情况。我认为这是 PDFKit 在搜索时对页面建立索引所做的某种优化。
我找到了一种解决方法,可以在不增加太多应用程序内存使用量的情况下工作。
我的解决方案是实例化一个新的PDFDocument
反对每个x
页。我解析了范围内每个页面的文本nx ..< (n+1)x
并搜索关键字。通过在每个范围实例化一个新的 PDFDocument 对象,先前的对象被释放,索引页面也被释放。此外,每个页面的文本字符串都可以被缓存,这比搜索时 PDFKit 内部文档索引需要更少的内存。如果页面被缓存,接下来的搜索几乎立即执行。
该解决方案具有良好的性能结果。它还具有了解当前搜索进度的优点。这是因为您拥有当前范围的信息以及完成搜索所需的范围总数。此外,该解决方案还可以通过在单独的线程中执行每个范围内的搜索来并行化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)