Coredata性能:加载许多单个实体是否会受到惩罚?

时间:2017-01-18 13:43:58

标签: ios core-data

我正在处理一个应用程序,该应用程序将包含从CLLocationManager绘制的一组点并在地图上绘制它们。我从来没有真正需要将每个点作为一个单独的实体,它们只在路径的上下文中有意义。

我可以将路径存储为大JSON(或其他更高效的字符串格式),而不是创建表示点的模型,因此只需在读取数据时读取单个实体。在我看来,这可以节省开销,是真的吗?

1 个答案:

答案 0 :(得分:1)

这需要进行一些测试。直接找到包含点的路径可能是一种更快的方法,然后获取对应于某个路径的所有点,但将它们写入字符串的部分似乎有点偏离。解析这些字符串会很慢。 (JSON是一个字符串)。

为了将点保存到路径中,我建议还要添加点实体,然后通过引用路径链接。另一种方法是使用可转换数据;您的观点将由2或3个双值表示,这些值可以直接放入缓冲区(例如NSData)。保存的数据长度然后将点数定义为data.length/(sizeof(double)*dimensions)。这在ObjectiveC中非常容易完成,而在Swift中,使用原始数据和不安全指针时可能会丢失一些头发。

这实际上取决于您正在实施的内容,但如果您计划在数据库中拥有非常多的路径,则在获取数据时仍可能会出现大的延迟。您可能想要考虑创建扇区。每个扇区将使用与区域(MKCoordinateRegion)相同的数据来表示,在数据库初始化时,您将迭代以创建整个地球的扇区。然后在插入路径时,检查路径与哪些区域相交,并为这些区域指定路径(多对多关系)。现在,当您显示地图时,您可以检查哪些区域可见,并仅获取这些区域,然后从中提取路径。

相关问题