优化

2018-03-06

提高SQLite的每秒插入性能?

优化SQLite是非常棘手的。C应用程序的批量插入性能可以从每秒85次插入到每秒超过96,000次插入! 背景:我们使用SQLite作为桌面应用程序的一部分。我们有大量的配置数据存储在XML文件中,这些数据被解析并加载到SQLite数据库中,以便在初始化应用程序时进一步处理。SQLite非常适合这种情况,因为它速度很快,不需要专门的配置,数据库作为单个文件存储在磁盘上。 理由: 最初我对我所看到的表现感到失望。事实证明,根据数据库的配置方式以及如何使用API​​,SQLite的性能可能会有很大差异(对于批量插入和选择)。找出所有的选项和技术并不是一件简单的事情,所以我认为创建这个社区wiki条目与Stack Overflow读者分享结果是很明智的,以便为其他人省去相同调查的麻烦。 实验:我认为最好是编写一些C代码并实际测量各种选项的影响,而不是简单地谈论一般意义上的性能提示(即“使用事务!”)。我们将从一些简单的数据开始: 多伦多市全部交通时间表的28 MB TAB分隔文本文件(约865,000条记录) 我的测试机是运行Windows XP的3.60 GHz P4。 代码使用Visual C ++ 2005作为“发布”进行编译,使用“完全优化”(/ Ox)和优先快速代码(/...

Read More
2018-01-18

为什么处理排序后的数组比未排序的数组更快?

这是一个C ++代码,看起来很奇特。出于一些奇怪的原因,对数据进行排序后使得代码神奇地快了近6倍。 没有std::sort(data, data + arraySize);,代码运行在11.54秒。 使用排序后的数据,代码在1.93秒内运行。 起初,我认为这可能只是一种语言或编译器异常。所以我尝试了Java。 有点类似但不太极端的结果。 我的第一个想法是,排序将数据带入缓存,但后来我觉得是多么愚蠢的,因为该数组刚刚生成。 到底是怎么回事? 为什么处理排序后的数组比未排序的数组更快? 代码正在总结一些独立的术语,顺序应该不重要。 问题评论 只是为了记录。在Windows /...

Read More