在PDF中搜索会增加应用程序的内存使用量

时间:2018-08-06 13:40:08

标签: ios pdfkit

我注意到当我搜索大型PDF时,该应用程序的内存使用量增加了,因为PDFKit正在执行一些内部搜索缓存。有什么方法可以控制此缓存大小?就我而言,完成搜索后,缓存的内存会增加500 MB以上。

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

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

3 个答案:

答案 0 :(得分:2)

感谢您的意见。要求是在客户端的PDF中搜索。以我为例,PDF大约有300页,其中也包含图像。 搜索完成后,直到释放了PDFDocument,内存使用量才有所下降。这通常在关闭包含PDFView的屏幕时发生。我认为这是PDFKit进行的某种优化,可以在搜索时为页面建立索引。

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

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

答案 1 :(得分:0)

我将尝试以某种方式完成此服务器端的工作,其中缓存的容量要大得多,并且这种容量超出了手机的管理能力。

答案 2 :(得分:-1)

如果string.isEmpty很小或很少,请勿调用此方法,只需返回