C# SQLite写入性能

C# SQLite写入性能,c#,performance,sqlite,optimization,C#,Performance,Sqlite,Optimization,我一直在尝试做一个写操作,在我的SQLite数据库上大约有50万条记录。在这里给出一个上下文,我在做一个项目,最初并不期望有很多数据,所以我继续使用SQLite,它一直保持良好状态,直到更多的数据进来,写操作的性能急剧下降。现在插入50万条记录需要很长时间。顺便说一句,我在一个线程中使用C代码来插入数据。 任何提高写操作性能的建议都将不胜感激。任何时候,只要您做的写操作数量不多,您就需要用一个事务围绕所有写操作 如果不这样做,SQLite会将每个单独的插入封装在自己的事务中,而这正是使您变慢的原

我一直在尝试做一个写操作,在我的SQLite数据库上大约有50万条记录。在这里给出一个上下文,我在做一个项目,最初并不期望有很多数据,所以我继续使用SQLite,它一直保持良好状态,直到更多的数据进来,写操作的性能急剧下降。现在插入50万条记录需要很长时间。顺便说一句,我在一个线程中使用C代码来插入数据。
任何提高写操作性能的建议都将不胜感激。

任何时候,只要您做的写操作数量不多,您就需要用一个事务围绕所有写操作

如果不这样做,SQLite会将每个单独的插入封装在自己的事务中,而这正是使您变慢的原因。如果您使用自己的事务,SQLite将使用该事务,并且不会为每个插入创建事务


请参见

如何向数据库写入?是否重复使用相同的连接?保持连接打开吗?@Alex是的,我重复使用了同一个DB连接。我真的很好奇:你知道现在SSD非常正常,它是否做得更好吗?好问题-我不知道答案。@asherber谢谢你提供的信息,对于使用该事务,我有一个疑问,那就是,当插入几条记录受到限制时,整个事务会发生什么情况。我们如何解决这种情况?@user1693597当你说“约束”时,是指错误吗?如果插入时出现任何错误,那么整个事务将回滚,并且不会插入任何记录——这就是事务的定义。根据您的使用情况,将较小的插入组封装到事务中可能是有意义的,比如每1000条记录或其他内容封装一个事务,这样当一个插入失败时,它就不会占用所有其他插入。请记住,就速度而言,事务的数量比插入的数量限制要大得多。@MarcGravel对于大约800-900个插入的批量插入,我已经看到SSD与以前的7200 rpm相比有很大的不同。但是2-3次插入的正常小交易我没有看到任何区别。但是数据量太少,用户看不到20ms和2ms之间的差异。体积大约为5秒,现在是瞬间的,用户可以看到。(更新我正在使用sqlite 3.0)