- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们最近将代码转换为使用 UIDocument 而不是直接在文件系统上操作文件,因此我们遇到了一些性能问题。我们想知道我们是否错误地使用了这个类,是否有其他人遇到过这些问题,以及解决这些问题的常用方法是什么。
我们有一个“鞋盒应用程序”来管理一堆文档,每个文档都包含多个可能非常重的图像文件、一个小的元数据文件和一个小的预览图像。用户的设备上可能有很多文档(1000 多个文档)。每个文档的文件都分组在一个目录中,我们使用 NSFileWrapper 来读取和写入它们。
当我们的应用程序启动时,它需要所有文档的元数据才能显示文档索引和预览图像的子集。用户滚动时会加载更多预览图像。
为了获取该信息,我们打开所有文档,读取它们的元数据并在需要时预览图像,关闭它们,然后根据需要再次打开。
打开所有文档并读取它们的元数据需要花费大量时间。我认为有几个因素导致了这个问题: - 每个文件打开 Action 比较慢 - 打开文档 block 和完成 block 在同一个队列上执行,这使得操作的延迟非常糟糕(我的文档是打开的,但是完成 block 必须等待X个打开文档 block 才能运行)
我们考虑过使用单独的索引文件来解决这个问题,但这种方法的缺点是我们需要在两个地方管理元数据,并且我们需要保持它与文件系统同步,以防 iCloud 更改索引文件。
每个打开的文档都会创建自己的“文件访问线程”。当我们同时打开许多文档时,开销会压垮应用程序。
我们通过使用信号量同步打开操作解决了这个问题。这种方法的缺点是它会进一步减慢加载速度。
谢谢!
最佳答案
好的,这里没有好消息。
我们尝试咨询业内 friend ,分析 UIDocument 并使用修改后的实现来改变其操作的各个方面,以查看我们是否可以提高其性能,但无济于事。
我的结论是 UIDocument 不适合这种用途——它的设计目的不是为了支持我们对开放式操作的延迟和吞吐量要求。 UIDocument 只应在您想在任何给定时刻打开少量文件时使用(很像文字处理器和绘图应用程序)。不可否认,这正是 Apple 的文档所说的,但我想我们必须通过艰难的方式来了解它们的严重性:)
我们最终使用了一些“技巧”来改善用户体验,并将尽快摆脱 UIDocument。
所以我的建议是,只有在:
然后使用它。否则考虑其他解决方案。
附注与问题没有直接关系,但我将在此处添加为公共(public)服务:当我们从直接文件访问转移时,UIDocument 的异步模型需要对应用程序架构进行一些重大更改。如果您计划采取此行动,请仔细评估您需要做的工作。
祝 future 的程序员好运。
关于ios - UIDocument & NSFileWrapper 架构和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23265422/
我尝试通过以下方式打开文档文件,但没有任何反应。我也尝试过其他方法,但它对我不起作用。打开文档文件(doc、docx、pdf、ppt 等)的正确方法是什么。我在 UIWebView() 的某处读到这也
我正在尝试打开多个 UIDocument循环中的实例,使用 - (void)openWithCompletionHandler:(void (^)(BOOL success))completionHa
我目前正在使用 UIDocument 子类将我现有的应用程序从 CoreData 存储重新设计为基于文档的应用程序。这主要是为了能够引入 iCloud 同步,因为 CoreData 中的 iCloud
无论我怎么尝试,这都行不通... 我正在尝试使用 UIDocument 在本地保存我的(文本)文件。当我创建一个文件(即它没有加载)时,它保存得很好。 但是,如果我通过打开文件加载我的文件然后保存它,
我正在处理云中的文档... * 将文档添加到云端 * 从云端删除该文件 * 不知何故,该文件在几秒钟后重新出现。 以下是详细信息: 我像这样创建了一个 UIDocument 实例 NSURL
我有一个带有 UIDocument 的基于文档的 iOS 应用程序子类。我需要能够在文件系统上移动它代表的文件。我考虑过用 NSFileManager 移动它, 但这会弄乱 UIDocument的fi
我有一个 UIDocument,我希望它由 (1) 一个 txt 文件和 (2) 几个 jpg 图像组成。我将 txt 和所有 jpg 放入 NSFileWrapper 中。 当我加载 UIDocum
我正在尝试遵循本教程... https://www.raywenderlich.com/131668/document-provider-tutorial 我已经到了这一部分... 但是我无法弄清楚在
我设置 UIDocument 以将我的文件保存到设备。我用 标记一个文件需要保存 [ myDoc updateChangeCount:UIDocumentChangeDone ] 现在看来,保存操作只
这可能是一个幼稚的问题 - 但我想仔细检查以避免在 UIDocument 上浪费时间,如果它不符合我的要求的话。 背景:我有一个应用程序,我为其创建了一个简单的文件系统来将用户创建的文档保存为 pli
我使用过 UIDocument,但我不明白与使用 Archiving 相比有何优势?假设您不想使用 iCloud。 最佳答案 来自 Apple 的文档:http://developer.apple.c
我正在使用 Xcode。 在我的应用程序中,我在那个位置保存了一些 UIdocuments [[NSFileManager defaultManager] URLsForDirectory:NSDoc
我一直在尝试向 UIDocument 应用程序的图标添加缩略图。我给出的例子相对简单。通过重写 UIDocument 类中的 fileAttributesToWrite 函数,将图像分配给 thumb
Apple 的 iOS 基于文档的应用程序编程指南显示了构建 FileRepresentation 对象列表以显示文档索引的示例代码。最初没有创建 UIDocument 的实例。然后,当打开文档时,将
创建了UIDocument(XDocument)的子类,由于数据量大,需要一些时间来保存文档。 因此,当我使用 closewithcompletionhandler 关闭 XDocument 实例时,
我在 Swift 中使用 DocumentBrowserViewController 将文档呈现给 ViewController。在 ViewController 中,我有一个 tableView 来
我在我的应用程序中使用文档包(通过 FileWrapper API)并且我使用 UIDocumentBrowserViewController 类进行文档管理。文档包基本上表示(文本)文件和文件夹的层
我有一个基于文档的 iOS 应用程序,当它第一次打开文档时,主视图 Controller 调用 UIDocument.open。 document.open { success in if s
当一个 UIDocument 被关闭时,它还能再次关闭吗?即使它的 documentState 在重新打开后是 UIDocumentStateNormal? 请帮帮我。非常感谢! [document
当我尝试通过 iCloud 同步/共享的文件本质上是一个 NSDictionary 时,我试图弄清楚 UIDocument 子类到底应该是什么样子。 字典文件(plist)有一堆键是主键。每个键都可以
我是一名优秀的程序员,十分优秀!