首页 > 解决方案 > 在 PDF 中搜索会过多地增加应用程序的内存使用量

问题描述

我注意到,当我在大型 PDF 中搜索时,应用程序的内存使用量会增加,因为 PDFKit 正在执行一些内部搜索缓存。有没有办法控制这个缓存大小?在我的情况下,搜索完成后缓存的内存增加了 500 MB 以上。

为了在 PDF 文档中进行搜索,我使用了:

func beginFindString(_ string: String, withOptions options: NSString.CompareOptions = [])

标签: iospdfkit

解决方案


感谢您的意见。要求是在客户端的 PDF 中进行搜索。就我而言,PDF 大约有 300 页,其中还包含图像。搜索完成后,直到 PDFDocument 被释放,内存使用量并没有下降一点。这通常发生在包含 PDFView 的屏幕被关闭时。我认为这是 PDFKit 在搜索时对页面进行索引的某种优化。

我找到了一种解决方法,它不会过多地增加应用程序的内存使用量。我的解决方案是每页实例化一个新PDFDocument对象。x我解析了范围内每个页面的文本nx ..< (n+1)x并搜索了关键字。通过在每个范围内实例化一个新的 PDFDocument 对象,前一个对象被释放,索引页面也被释放。此外,可以缓存每个页面的文本字符串,这比 PDFKit 内部文档索引在搜索时需要更少的内存。如果页面被缓存,接下来的搜索几乎立即执行。

该解决方案具有良好的性能结果。它还具有了解当前搜索进度的优势。这是因为您拥有当前范围的信息以及完成搜索所需的范围总数。此外,该解决方案还可以通过在单独的线程中执行每个范围内的搜索来并行化。


推荐阅读