当前位置: 首页 > 编程语言 > C#

SQLite.NET性能,如何提速?分享

时间:2023-04-10 23:16:54 C#

SQLite.NET的性能,如何提速?在我的系统上,大约86000个SQLite插入需要20分钟,这意味着每秒大约70个插入。我必须做数百万,我怎样才能加快速度?为SQLiteConnection对象的每一行调用Open()和Close()会降低性能吗?交易有帮助吗?一个典型的单行插入方法:command.CommandText="INSERTORIGNOREINTOResult"+"(RunTag,TopicId,DocumentNumber,Rank,Score)"+"VALUES(@RunTag,@TopicId,@DocumentNumber,@Rank,@Score)";//Impostai参数command.Parameters.AddWithValue("@RunTag",runTag);命令.Parameters.AddWithValue("@TopicId",topicId);命令.Parameters.AddWithValue("@Doc??umentNumber",documentNumber);命令.Parameters.AddWithValue("@Rank",rank);命令。Parameters.AddWithValue("@Score",score);//Ottieniilrisultatoechiudilaconnessioneintretval=command.ExecuteNonQuery();connection.Close();返回retval;}如您所见,插入非常简单。你绝对需要一笔交易。如果你不这样做,SQLite会为每个插入命令启动它自己的事务,所以你实际上有86000个事务。看起来您每次都在打开和关闭连接,每次都重置CommandText。这是不必要的,毫无疑问会让你失望,如果你这样做会更快:我认为你可以通过这种方式将你的20分钟减少到几秒钟。编辑:这就是我的意思:publicvoidInsertItems(){SQLiteConnectionconnection=newSQLiteConnection(SomeConnectionString);SQLiteCommand命令=connection.CreateCommand();SQLiteTransaction事务=connection.BeginTransaction();command.CommandText="INSERTORIGNOREINTOResult"+"(RunTag,TopicId,DocumentNumber,Rank,Score)"+"VALUES(@RunTag,@TopicId,@DocumentNumber,@Rank,@Score)";命令.Parameters.AddWithValue("@RunTag","");命令.Parameters.AddWithValue("@TopicId","");命令.Parameters.AddWithValue("@Doc??umentNumber","");命令.Parameters.AddWithValue("@Rank","");命令.Parameters.AddWithValue("@Score","");foreach(/*要循环并添加到数据库的项目*/){InsertResultItem(runTag,topicId,documentNumber,rank,score,command);}事务.提交();命令.处置();connection.Dispose();}publicintInsertResultItem(stringrunTag,inttopicId,stringdocumentNumber,intrank,doublescore,SQLiteCommandcommand){command.Parameters["@RunTag"].Value=runTag;命令.Parameters["@TopicId"].Value=topicId;命令.Parameters["@Doc??umentNumber"].Value=documentNumber;命令.Parameters["@Rank"].Value=rank;命令.Parameters["@Score"].Value=score;返回命令.ExecuteNonQuery();}它只使用一个连接,一个事务和一个命令,所以每次更改参数值都使用事务。这应该会让事情变得更快。我还建议您使用以下模式:以上是C#学习教程:SQLite.NET性能,如何加速?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——publicintInsertResultItem(stringrunTag,inttopicId,stringdocumentNumber,intrank,doublescore){//Aprelaconnessioneeimpostailcomandousing(varconnection=newSQLiteConnection(SomeConnectionString))using(varcommand=newconnection.CreateCommand()){connection.Open();使用(vartx=connection.BeginTransaction()){command.CommandText="INSERTORIGNOREINTOResult"+"(RunTag,TopicId,DocumentNumber,Rank,Score)"+"VALUES(@RunTag,@TopicId,@DocumentNumber,@Rank,@Score)";//Impostai参数命令。Parameters.AddWithValue("@RunTag",runTag);命令.Parameters.AddWithValue("@TopicId",topicId);命令.Parameters.AddWithValue("@Doc??umentNumber",documentNumber);command.Parameters.AddWithValue("@Rank",等级);命令.Parameters.AddWithValue("@Score",score);//Ottieniilrisultatoechiudilaconnessionevarretval=command.ExecuteNonQuery();tx.Commit();返回retval;}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: