Cocoa 使用核心数据的类似电子表格的应用程序?

Cocoa 使用核心数据的类似电子表格的应用程序?,cocoa,core-data,Cocoa,Core Data,我正在开发一个应用程序,其中很大一部分将是一个类似电子表格的视图(不管列和行的名称如何,都有数值)。在这种情况下使用核心数据有什么意义吗?我担心效率,因为我知道核心数据本身不支持阵列,而且我觉得这种关系不适合我的情况。但也许我错了?虽然没有实现这一点,特别是在核心数据方面,但我在基于web的应用程序中使用Java和Hibernate做了一些类似的事情 如果您能够预测需要显示哪些数据(hibernate中也包括这些数据),那么核心数据的速度相当快。因此,您应该将视图与模型和后台数据库分离,以缓存可

我正在开发一个应用程序,其中很大一部分将是一个类似电子表格的视图(不管列和行的名称如何,都有数值)。在这种情况下使用核心数据有什么意义吗?我担心效率,因为我知道核心数据本身不支持阵列,而且我觉得这种关系不适合我的情况。但也许我错了?

虽然没有实现这一点,特别是在核心数据方面,但我在基于web的应用程序中使用Java和Hibernate做了一些类似的事情

如果您能够预测需要显示哪些数据(hibernate中也包括这些数据),那么核心数据的速度相当快。因此,您应该将视图与模型和后台数据库分离,以缓存可用数据,并使用粗粒度操作获取重新需要的单元格


如果模型中存在大量依赖关系,那么这种对数据库的粗粒度访问可能会导致将整个信息网络提取到模型中。目前,我使用多级公司平衡来实现这一点,对应用程序的任何访问都只是将整个数据结构提取到内存中。

虽然没有实现这一点,特别是对核心数据,但我在基于web的应用程序中使用Java和Hibernate做了一些类似的事情

如果您能够预测需要显示哪些数据(hibernate中也包括这些数据),那么核心数据的速度相当快。因此,您应该将视图与模型和后台数据库分离,以缓存可用数据,并使用粗粒度操作获取重新需要的单元格

如果模型中存在大量依赖关系,那么这种对数据库的粗粒度访问可能会导致将整个信息网络提取到模型中。目前,我使用多级公司平衡来实现这一点,对应用程序的任何访问都只是将整个数据结构提取到内存中。

我使用与NSTableView的Cocoa绑定制作了一个类似于核心数据电子表格的应用程序(实现得相当简单),发现当它达到大约20行20列时,性能无法接受。但这是我的第一个Cocoa项目,我对优化核心数据一无所知(在很大程度上,我仍然不知道)

您可以在此处下载并试用该应用程序:

如果你感兴趣的话,我可以把信息来源发给你(该网站的联系方式)

我使用Cocoa绑定到NSTableView开发了一个类似于核心数据电子表格的应用程序(相当天真地实现了),当它达到大约20行20列时,我发现性能不可接受。但这是我的第一个Cocoa项目,我对优化核心数据一无所知(在很大程度上,我仍然不知道)

您可以在此处下载并试用该应用程序:


如果你感兴趣的话,我可以把信息来源发给你(该网站的联系方式)

虽然使用SQLite存储类型获取核心数据的请求速度非常快,但有一件事会让您速度变慢,那就是所有
-valueForKey/Path:
调用都会在数据点(单元格)成为对象后获取其值(也就是说,查询数据库的速度快得惊人,但在数据库中对对象进行错误处理并在对象进入数据库后查询其属性的速度要慢得多)

不要低估其中五万个调用的重要性,尤其是在涉及排序和显示的情况下。在托管对象模型中有几种不同的方法来表示这一点,但它们都面临着相同的问题,并且在性能方面有各种折衷,相当于“不够快”用于跟踪任意大小矩阵中的单个单元格。如果您始终知道电子表格将有(例如)30列,则问题会大大简化…但这将是一个相当糟糕的电子表格。:-)

即使使用了大量缓存(如文档中提到的“预先计算的Get”方法),也只会将负担转移到内存上,而内存在不同的机器上可能无法很好地支撑


我的建议是将核心数据排除在外。

虽然使用SQLite存储类型获取请求时核心数据非常快,但有一件事会让您速度变慢,那就是所有
-valueForKey/Path:
调用,以便在数据点(您的单元格)成为对象后获取它们的值(也就是说,查询数据库的速度快得惊人,但在数据库中对对象进行错误处理并在对象进入数据库后查询其属性的速度要慢得多)

不要低估其中五万个调用的重要性,尤其是在涉及排序和显示的情况下。在托管对象模型中有几种不同的方法来表示这一点,但它们都面临着相同的问题,并且在性能方面有各种折衷,相当于“不够快”用于跟踪任意大小矩阵中的单个单元格。如果您始终知道电子表格将有(例如)30列,则问题会大大简化…但这将是一个相当糟糕的电子表格。:-)

即使使用了大量缓存(如文档中提到的“预先计算的Get”方法),也只会将负担转移到内存上,而内存在不同的机器上可能无法很好地支撑


我的建议是将核心数据排除在外。

谢谢,弗兰克,但我很惊讶我的应用程序必须平稳处理超过20行和20列的数据。。。目前,我在编写代码方面并不真正需要帮助(但?:),而是需要一些一般的线索,看看在这种类型的应用程序中使用核心数据是否是一个好的选择。谢谢,Frank,但我很惊讶,我的应用程序必须顺利处理超过20行和20列的数据。。。目前,我在编写代码方面并不需要帮助(但?:),而是需要一些一般性的线索来判断在这种类型的应用程序中使用核心数据是否是一个好的选择。