Multithreading 如何使我的应用程序更具响应性? 出身背景
这与我的背景相同,只是Outline视图没有fetch谓词Multithreading 如何使我的应用程序更具响应性? 出身背景,multithreading,cocoa,core-data,nsoperation,Multithreading,Cocoa,Core Data,Nsoperation,这与我的背景相同,只是Outline视图没有fetch谓词 我有一个显示培训组实体的NSOutlineView NSOutlineView绑定到NSTreeController 在NSTreeController中,我勾选了“保留选择”,取消勾选了“选择插入的对象” 每个培训组代表本地计算机上的一个文件夹 每个培训组可以分配到一个项目。项目应传播到该组的所有后代 项目列绑定到每个培训组的项目属性 这个视图中有很多数据。因为每次条目都有一个条目,所以在一个训练视图下总共可以有15000个后代
- 我有一个显示培训组实体的
NSOutlineView
绑定到NSOutlineView
NSTreeController
- 在NSTreeController中,我勾选了“保留选择”,取消勾选了“选择插入的对象”
- 每个培训组代表本地计算机上的一个文件夹
- 每个培训组可以分配到一个项目。项目应传播到该组的所有后代
- 项目列绑定到每个培训组的项目属性
- 这个视图中有很多数据。因为每次条目都有一个条目,所以在一个训练视图下总共可以有15000个后代
Name Project
Users nil
John nil
Documents nil
Acme Project Acme Project
Proposal.doc Acme Project
12:32-12:33 Acme Project
13:11-13:33 Acme Project
... thousands more here!
Budget.xls Acme Project
Big Co Project Big Co Project
Deadlines.txt Big Co Project
Spec.doc Big Co Project
New Project nil
StartingUp.doc nil
Personal Stuff Personal
MyTreehouse.doc Personal
Movies nil
Aliens.mov nil
StepMom.mov nil
在项目分配时
- 编辑项目时,对所有子类的赋值发生在后台线程上的
子类上,因此用户可以在处理所有子类的同时自由地进行其他选择和移动NSOperation
- 操作完成后,我在主托管对象上下文上运行
方法:mergeChangesFromContextDidSaveNotification:
mainContext=[[NSApp委托]managedObjectContext]代码>
[mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) withObject:通知 waitUntilDone:是的代码>
- 从功能上讲,这很好——当上下文合并回主上下文时,所有子体都被分配给项目
- 合并时,绑定到主上下文的
将冻结,合并可能需要几秒钟才能完成NSOutlineView
- 为了减少这种冻结,我将分组分配到几个较小的操作中
提前感谢您对替代方案的建议。我目前正处于冻结状态。但我认为答案是并行我的操作,将合并所需的时间减少到尽可能少的程度。毫无疑问,我可以对数据模型做很多改进,使操作更容易合并
最近我尝试在后台线程上实现一个合并,但很难让它正常工作。我想,这将是我重新审视的东西。我目前正生活在冰冻之中。但我认为答案是并行我的操作,将合并所需的时间减少到尽可能少的程度。毫无疑问,我可以对数据模型做很多改进,使操作更容易合并
最近我尝试在后台线程上实现一个合并,但很难让它正常工作。我想,这将是我重新考虑的问题。这不是一个简单的答案,因为我不太使用核心数据。但您应该查看有关Advance core data的WWDC视频。他们有一个关于优化性能的部分。只需在iTunes中搜索WWDC 2010。它们是免费的。干杯,谢谢。我真不敢相信我没有想过早点检查这些东西——我知道它们存在。好主意。谢谢。:)这不是一个答案,因为我不太使用核心数据。但您应该查看有关Advance core data的WWDC视频。他们有一个关于优化性能的部分。只需在iTunes中搜索WWDC 2010。它们是免费的。干杯,谢谢。我真不敢相信我没有想过早点检查这些东西——我知道它们存在。好主意。谢谢。:)