我有一个OS X Cocoa cpplication(10.8-10.9),可以打开大约2 GB或更大的非常大的NSDocument(Core Data支持的)文件。对于文档的初始加载,这需要大约20-40秒,但后来非常活泼。 20-40秒并不完全具有良好的UI体验,因此我想解决这个问题。
我想要A)使文件打开得更快,或者B)显示“加载”屏幕。
我想知道人们对A做了什么(如果有的话)更快地打开核心数据文档(即使它在后台做事)或B)在打开过程中显示闪屏/进度条。
WRT到B)(不是一个由两部分组成的问题,真的,只是想证明我已经做过研究)通过在NSDocument类中创建方法来显示一个启动画面,如果在调用期间调用:windowControllerWillLoadNib和windowControllerDidLoadNib方法,但仅在之后第一个文件已经打开(我确信有一个解决方法)。无论哪种方式,都没有“进展”,我可以看到我可以建立一个钩子,无论如何。答案 0 :(得分:0)
尝试在后台线程上打开商店,一旦打开就激活用户界面 - 这似乎工作正常。
我创建了一个后台线程来调用[psc addPersistentStoreWithType:configuration:URL:options:error:],一旦完成,我就将控制权交还给创建了managedObjectContext并启用了UI的主线程。
如果Core Data必须对新模型版本进行大幅升级,则会遇到此问题。我的一些文件需要大约一分钟,如果它们在iCloud中,它可能会更长。如果升级发生在iOS设备上,则可能需要几分钟,因此这似乎对iOS应用程序也很重要。
BTW我在这里发布了示例应用程序 http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/
答案 1 :(得分:0)
除了Duncan给你的具体提示之外,查看ADC上的最新(和免费)WWDC视频总是有用的,以了解OS X和Cocoa提供的模式,特别是提升应用性能。一些起点:
WWDC '12
- 使用Blocks,GCD和XPC的异步设计模式
WWDC '13
- 设计性能代码
答案 2 :(得分:0)
-getLociWithChromsomes:
做什么?当您在“仪器”中使用该方法查看正在进行的操作时会发生什么?
与-GetAllLoci:
和-getMaxLocusSnps
相同的问题?
从我可以看到的少量数据看来,你在发布时正在进行大量的提取。无论您使用什么平台,这都是一个糟糕的设计。您应该避免在文档启动期间进行大量提取,并将其推迟到初始文档/应用程序启动完成之后。
你可以在这里使用多线程设计,它可能会有所帮助,但它确实掩盖了这个问题。
问题的核心似乎是你试图在发布时做太多。我不确定整个延迟是在核心数据中还是在检索数据后你正在做什么,因为我没有通过你提供的跟踪进行代码级访问。如果突出显示时间百分比,那么在Instruments中查看上述方法的屏幕截图会很有趣。
同样,在启动期间加载太多并阻止UI。你有三个答案都说同样基本的东西。这不是核心数据问题。这是一个性能问题,因为您在启动时加载太多,或者在启动时计算量太大。