iphone - 使用 CoreData 与内存中的内存占用优势不明显/不明显 - 意见?

标签 iphone performance core-data ios

我有一个应用程序当前在内存中保存所有状态。它从服务器获取大量 JSON 信息,然后将 JSON 值保存在内存中。每个JSONObject可以是 ~300 字节,并且可以有数千个这样的对象。
我只是使用这些数据来填充 UITableView .

为了更好地处理大量的 aata,我修改了我的代码以从服务器获取数据并使用 CoreData 存储它。 JSON 对象可以表示为简单的实体,每个实体有 3 个 NSString属性和一个 1 int32 属性。我创建了一个 NSFetchedResultsController用作 UITableView 的数据源.我的假设是这将减少我的应用程序的常驻内存使用量(我假设 NSFetchedResults Controller 有效地管理内存以不保存未显示在 View 中的实体,而不是保存我的所有状态在内存中)。
出于本次讨论的目的,假设我的应用程序在每次运行时都会清除 CoreData 存储并重新获取所有数据。

当我使用 Instruments 中的 VM Tracker 测量驻留内存和虚拟大小的变化时,我注意到这两个值几乎保持不变。事实上,我的应用程序的基于 Core-Data 的版本似乎比我将所有东西都完全放在内存中时使用了更多的内存。

虽然这可能是真的,但我不知道为什么会这样。有什么解释吗?
从我所说的关于我的应用程序的情况来看,听起来我不想费心坚持使用 CoreData,为什么?

最佳答案

如您所见,如果有内存,Core Data 可以使用更多内存。但是,Core Data 的好处之一是当您遇到内存不足的情况时。当这种情况发生时,Core Data 会自动尽可能地减少自己的内存占用。

要考虑的另一件事是您是否让 Core Data 对这些对象进行故障处理?如果您要拉入 1000 个对象并显示其中的 10 个,那么其他 990 个应该处于故障状态,因此占用的内存更少。

我会运行 Core Data 工具,并确保您不会意外地实现所有这些对象,并无意中导致您的内存使用量高于所需的水平。

更新

听起来您正在导入此数据,然后如果您没有看到任何故障发生,则没有正确刷新核心数据。

假设您在首次启动时加载此数据(顺便说一句,我不会这样做,我会预加载应用程序并完全避免使用 plist 文件),您想调用 -reset在您的 NSManagedObjectContext 上加载完成后,任何未使用的对象都会从内存中清除。然后,当数据返回内存(使用时)时,它会出现适当的故障。

最后,确保您使用的是 SQLite 存储。否则这一切都没有实际意义。

关于iphone - 使用 CoreData 与内存中的内存占用优势不明显/不明显 - 意见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3517133/

相关文章:

iphone - FBSession checkThreadAffinity

ios - user-scalable=no 不起作用,是否仍受支持?

java - 在 Java 中使用 && 和相同的变量分配给一个变量是否正确?

javascript - 淡入/淡出许多(20 个左右)项目同时导致巨大的性能损失。解决方案?

iphone - 如何制作我正在编写的 2 个应用程序交换信息?

swift - 如何从两个实体核心数据获取数据并在 TableView 中显示(Swift)

iphone - Sybase ULtralite DB 和 iOS 核心数据

iphone - 在两个静态文本之间进行选择

windows - 最小 Winsock2 应用程序的性能调试网络吞吐量

ios - 当属性为 nil 时核心数据谓词崩溃