2011-01-07 51 views
0

我们有约10个sqlite文件在我们的应用程序中下载,每个包含大约4000行。我们处理这些数据并将其显示在tableview中。滚动浏览tableview时,我们遇到了速度和内存问题。用于iPhone的sqlite vs csv文件

我们在想,不管sqlite文件,如果我们有csv文件或其他格式,我们是否可以比sqlite获得更好的性能?我已经读过xml或json不会有帮助,因为记录数量太大,解析时间会增加。

请建议。

+0

你有没有什么办法来分析它?你可以添加性能计时器来准确查看瓶颈发生的位置吗? – Zac 2011-01-07 21:59:31

+0

内存问题是因为我们试图从sqlite获取尽可能多的数据到数组中。自从我们读取数组并显示数据后,这使得滚动速度更快。然而,我们在数组中放入的数据越多,我们越早遇到内存问题,并且我们必须释放一些数据,然后可能会重新提取它,如果用户滚动到显示它的tableview中的那个位置。我们也尝试只提取tableview的可见区域的数据。 – 2011-01-07 22:09:59

回答

2

首先,不要以为SQLite是你的瓶颈。我在自己的应用程序中做了相同的假设,并花了数天的时间试图优化数据库访问,只是针对它运行Instruments,并发现我的界面中有一个缓慢的字符串处理例程,使事情陷入困境。

首先使用Time Profiler和Object Allocations来验证热点在代码中的位置。 SQLite的速度非常快。

这就是说,对于4000行,如果尝试将所有行加载到数组中以便显示在屏幕上,至少会遇到内存问题。我的建议是将这些数据导入到Core Data SQLite数据库中,并使用一个NSFetchedResultsController,其批处理大小设置为其获取请求比屏幕上显示的行数稍大。

核心数据将以这种方式处理批量数据的加载/卸载,这意味着只有一小部分数据库一次加载到内存中。这会导致巨大的加速(特别是在初始加载时),并且会显着减少内存使用量。它也使用一个微不足道的代码。

0

正确索引的SQLite数据库将在任何平面文件周围运行圆圈,尤其是在您有大量记录的情况下。也可以尝试将这10个文件合并到一个数据库中,这样您就可以在索引列上执行连接并使用诸如视图之类的聪明技巧。现在,您似乎从10个不同的数据库提取数据并手动比较/处理它们,这当然需要大量时间和内存。

0

它将取决于应用程序,您如何使用和查询数据。配置文件,确认sqlite是或不是问题。然后攻击分析结果。

廓线:Shark 或者some other profiling solution