将csv转换为数据库并绘制数据:优化建议

时间:2014-12-12 12:30:35

标签: objective-c c database sqlite

希望在这里提供一些关于最佳实践的建议。使用目标C和Xcode。

我创建了一个“FileConverter”类,它有一个方法可以将带有7列浮点值的cvs文件读入SQLite数据库(在验证数据并解析之后)。

我这样做的方法是将整个文件加载到NSString中,然后拆分成行组件,然后将每行拆分成列组件(将结果保存为2x2 NSArray。

然后我打开数据库并将数组复制到sqlite数据库中。我目前正在使用TEXT数据类型进行存储。在那里,我计划绘制数据图表。

似乎检查并转换cvs确定。然而,如果csv很长(比如10,000行),我会在它完成工作的同时获得旋转轮几秒钟。对于较短的文件,它几乎立即转换。

最终,在用户单击“转换CSV”时,我还将运行另一种方法来绘制数据图形,我希望这会在读取sql数据库时将导致数据延迟,将数据组装成CGPoints和然后进入图表视图。

我的问题是如何最好地优化流程,因此它可以处理较大的文件而不会出现旋转轮。这可能吗?

a)使用NSStrings和NSArray肯定会使读取和分割数据的工作变得非常简单,并且可以轻松验证数据。这是最好的方法吗?我应该malloc一个浮点数组吗?

b)我的工作原理是,通过将数据保存为数据库中的TEXT值,将它们转换为CGFloat值将很简单,但实现这将增加处理时间。

c)我想象一个sqlite3数据库在我绘制数据时会更快地获取数据,但我也可以简单地复制cvs文件并在绘制数据时解析它。 / p>

真的很感激这方面的建议

1 个答案:

答案 0 :(得分:0)

您的主线程运行UI,并且您尝试在主线程上进行计算(CSV计算),使UI挂起(不更新),使操作系统调用旋转轮。为避免这种情况,您需要将计算密集型操作移至辅助线程。

当csv文件较小时,同步操作可以执行csv计算并立即更新UI。在大文件的情况下,UI(应用程序窗口)等待计算完成,然后才能更新UI。在这种情况下,您需要在后台线程上异步计算csv计算。有很多方法可以实现这一点,最受欢迎的是Apple的GCD。

以下链接,Apple的非阻止用户界面指南详细解释了它:

Link to Apple's non blocking guide

Link to GCD