我正在开发一个应用程序,其中很大一部分将是类似电子表格的视图(尽管有列和行的名称,但仍有数值)。在这种情况下使用核心数据有什么意义吗?我担心效率,因为我知道Core Data本身不支持数组,我觉得关系不适合我的情况。但也许我错了?
答案 0 :(得分:1)
虽然使用SQLite商店类型获取请求时Core Data非常快,但有一件事会减慢你的速度,所有-valueForKey/Path:
次调用都会获得数据点(你的单元格)的值。重新实现的对象(即,查询数据库的速度非常快,但中的错误对象和一旦它们进入时查询它们的属性要慢得多。)
不要低估这些电话中五万个的重量,特别是在排序和显示方面。在管理对象模型中有几种不同的方式来表示这一点,但它们都遭遇同样的问题,并且在性能方面有各种权衡,等于“不够快”以跟踪任意大小的矩阵中的单个单元。如果你总是知道你的电子表格会有30列,那么问题会大大简化......但那将是一个相当差的电子表格。 : - )
即使您使用了大量缓存(例如文档中提到的“预先计算的Get”方法),您也只是将负担转移到内存上,而这些内存在不同的计算机上可能无法正常运行
我的建议是将Core Data从这个中删除。
答案 1 :(得分:0)
虽然没有特别使用Core-Data实现这一点,但我在基于Web的应用程序中使用Java和Hibernate做了类似的事情。
核心数据非常快,如果您可以预测需要显示哪些数据(这也是休眠的数据)。因此,您应该从模型和后台数据库中分离视图,以缓存可用数据并使用粗粒度操作获取所需的单元格。
如果模型中存在大量依赖关系,则对数据库的这种粗粒度访问可能会导致将整个信息网络提取到模型中。目前,我使用多级公司进行平衡,其中对应用程序的任何访问只是将整个数据结构提取到内存中。
答案 2 :(得分:0)
我使用Cocoa绑定到NSTableView做了一个(相当天真地实现的)核心数据电子表格式应用程序,并且一旦达到大约20行和20列就发现性能不可接受。但这是我的第一个Cocoa项目,并没有(并且在很大程度上仍然没有)知道优化核心数据的第一件事。
您可以在此处下载并试用该应用:
http://frankschmitt.org/projects/checkpoint
如果您有兴趣,我可以将您的来源发送给您(联系该网站上的信息)。