ios - 在 PDF 中搜索会过多地增加应用程序的内存使用量
问题描述
我注意到,当我在大型 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 内部文档索引在搜索时需要更少的内存。如果页面被缓存,接下来的搜索几乎立即执行。
该解决方案具有良好的性能结果。它还具有了解当前搜索进度的优势。这是因为您拥有当前范围的信息以及完成搜索所需的范围总数。此外,该解决方案还可以通过在单独的线程中执行每个范围内的搜索来并行化。
推荐阅读
- c - 打印二叉搜索树,分段错误错误11
- node.js - 内部 Docker 容器 NetworkingError: connect ECONNREFUSED 127.0.0.1:8002
- php - 使用ajax下载excel而不刷新页面
- python - 如何在两个索引之间设置熊猫数据框的值?
- javascript - 在 reactjs 中使用 setInterval 函数的正确位置是什么
- java - 更改 Set 中的值
- ios - iOS 11/12 使用联系人数据自动填充多个文本字段
- python - 将 np.array(n, m) 重塑为 np.array(m, n)
- bash - 将文件解析为 .aliasrc
- .htaccess - htaccess - 如果正确重写,则运行 url