gpt4 book ai didi

cocoa - 核心数据使用大量内存

转载 作者:行者123 更新时间:2023-12-03 16:34:21 26 4
gpt4 key购买 nike

我有一个数据模型,有点像这个简化的绘图:

alt text http://dl.dropbox.com/u/545670/thedatamodel.png

这有点奇怪,但其想法是该应用程序将一个人可能拥有的多个帐户/身份管理到一个消息系统中。每个帐户都与系统上的一个用户相关联,并且每条消息都可能被查看/发送到多个帐户(但它们具有全局唯一的 ID,因此在导入时使用 messageID 属性来获取可能已经被发送的消息对象)由先前的 session 下载并导入)。

该应用程序是从每个帐户的角度使用的 - 我的意思是,您选择要使用的帐户,然后您可以在窗口中从该帐户的角度看到消息和内容。因此,我将消息附加到帐户,以便我可以轻松获取应使用如下提取显示的消息:

    fetch.fetchPredicate = [NSPredicate predicateWithFormat:@"%@ IN accounts", theAccount];
fetch.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO]];
fetch.fetchLimit = 20;

这似乎是正确的设置方法,因为消息在帐户之间共享,如果一条消息被标记为已被一个帐户读取,我希望它被视为已被另一个帐户读取,依此类推。

无论如何,在完成所有这些设置之后,最大的问题是内存使用似乎变得有点疯狂。当我设置一个测试用例,将数百条消息导入系统,并定期重新获取(使用上面提到的获取)并将它们显示在列表中(列表仅引用最后 20 条)时,内存变得疯狂。 60MB.. 70MB... 100MB.. 等等

我追踪到帐户和消息之间的多对多关系。即使启用了垃圾收集,托管对象仍然被帐户的消息关系属性强烈引用。我知道这一点是因为我在 Message 实例的 Finalize 中放置了一个日志,但从未看到它 - 但如果我定期重置上下文或在帐户对象上执行刷新对象:mergeChanges:,我会看到 Finalize 消息和内存使用情况保持相当一致(虽然仍然有所增长,但考虑到我正在进口东西,这是可以预料的)。问题是我无法真正始终重置上下文或帐户对象,因为这确实会扰乱正在观察帐户对象其他属性的观察者!

我可能只是错误地建模或思考错误,但我一遍又一遍地读到,将核心数据视为对象图而不是数据库很重要。我想我已经在这里做到了,但它似乎造成了麻烦。我该怎么办?

最佳答案

使用对象图工具。它会告诉您使对象保持事件状态的所有所有权。

关于cocoa - 核心数据使用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2125285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com