将简历转换为数据库和图形数据:优化建议



希望在这里获得一些关于最佳实践的建议。在目标C和Xcode中工作。

我创建了一个"FileConverter"类,该类具有将具有 7 列浮点值的 cvs 文件读取到 SQLite 数据库中的方法(在验证数据并解析它之后(。

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

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

它似乎可以检查和转换 cvs。 但是,如果 csv 很长(比如 10,000 行(,我会在它工作时得到几秒钟的纺车。 对于较短的文件,它几乎可以立即转换。

最终,在

用户单击"转换CSV"时,我还将运行另一种绘制数据的方法,我希望这将在读取SQL数据库,将数据组装成CGPoints然后绘制到图形视图时导致巨大的延迟。

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

a( 使用 NSStrings 和 NSArrays 无疑使读取和拆分数据的工作变得非常简单,并使验证数据变得容易。 这是最好的方法吗? 我应该改用浮点数组吗?

b( 我的工作基础是,通过将数据保存为数据库中的 TEXT 值,将它们转换为 CGFloat 值将很简单,但要意识到这会增加处理时间。

c( 我想象 sqlite3 数据库在绘制数据时会是一种更快的获取数据的方法,但我也可以简单地复制 cvs 文件并在绘制数据时对其进行解析。

非常感谢这方面的建议

您的主线程运行 UI,并且您正在尝试在主线程上执行计算(CSV 计算(,使 UI 挂起(不更新(,使操作系统调用纺车。若要避免这种情况,需要将计算密集型操作移动到辅助线程。

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

以下链接,Apple的非阻塞UI指南对此进行了详细说明:

链接到苹果的非阻塞指南

链接到 GCD

最新更新