我注意到当我在大型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内部文档索引所需的内存更少。如果页面被缓存,则以下时间几乎立即执行搜索。
该解决方案具有良好的性能结果它还具有了解当前搜索的进度的优点。这是因为您拥有完成搜索所需的当前范围和范围总数的信息。此外,还可以通过在单独的线程中在每个范围内执行搜索来并行化该解决方案。
我会尝试以某种方式完成此服务器端,其中有一个更大的缓存容量,而不是你的手机可以管理。
如果string.isEmpty或非常少,请不要调用此方法,只需返回