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

如何回收我的SqliteCommand来加速这个Sqlite批量插入(iOS)?Share

时间:2023-04-10 15:08:35 C#

如何回收我的SqliteCommand来加速这个Sqlite批量插入(iOS)?我正在使用下面的代码批量插入30000行(一次1000行)。它仍然不是那么快。在此示例中提高SQLite的每秒插入性能?我可以看到他们只创建了一次SqliteCommand,然后重新循环它重置它并清除绑定。但是,我在iOS/Monotouch上找不到合适的方法。没有Reset()或ClearBindings()或类似的东西。使用(varoConn=newSqliteConnection("DataSource="+DB_NAME)){oConn.Open();//将整个批量插入包装到一个块中以使其更快,否则每个INSERT将创建一个事务。//请注意,这与“BEGINTRANSACTION”不同,后者会大大增加内存使用量!SqliteCommandoCmd=newSqliteCommand("BEGIN",oConn);oCmd.ExecuteNonQuery();oCmd.Dispose();foreach(MyObjoObjinaMyObjects){oCmd=newSqliteCommand("INSERTINTOLocalObjects(intID,intParentID,intObjectType,strName,dtModifiedVALUES(@intID,@intParentID,@intObjectType,@strName,@dtModified)",oCmd.Parameters.AddWithValue("@intID",oMyObj.ID);oCmd.Parameters.AddWithValue("@intParentID",oMyObj.ParentID);oCmd.Parameters.AddWithValue("@intObjectType",(int)oMyObj.Type);oCmd.Parameters.AddWithValue("@strName",oMyObj.Name);oCmd.Parameters.AddWithValue("@dtModified",oMyObj.Modified);oCmd.ExecuteNonQuery();oCmd.Dispose();}oCmd=newSqliteCommand("END",oConn);oCmd.ExecuteNonQuery();oCmd.Dispose();oConn.Close();oConn.Dispose();}尝试将您的代码更改为以下内容:using(varoConn=newSqliteConnection("DataSource="+DB_NAME)){oConn.Open();//将整个批量插入包装到一个块中以使其更快,否则每个INSERT将创建一个事务。//请注意,这与“BEGINTRANSACTION”不同,后者会大大增加内存使用量!SqliteCommandoCmd=newSqliteCommand("BEGIN",oConn);oCmd.ExecuteNonQuery();oCmd.Dispose();oCmd=newSqliteCommand("INSERTINTOLocalObjects(intID,intParentID,intObjectType,strName,dtModifiedVALUES(@intID,@intParentID,@intObjectType,@strName,@dtModified)",oConn);//.varid=oCmd.CreateParameter();id.ParameterName="@intID";oCmd.Parameters.Add(id);//.foreach(MyObjoObjinaMyObjects){//.id.Value=oMyObj.ID;//.oCmd.ExecuteNonQuery();}oCmd.Dispose();oCmd=newSqliteCommand("END",oConn);oCmd.ExecuteNonQuery();oCmd.Dispose();oConn.Close();oConn.Dispose();基本上,在每个循环中,您现在只需更改参数的值,而不是构建一个全新的查询。但是,我不确定您的性能是否真的会从中受益。你需要尝试一下。您也可以尝试使用存储过程来插入行。它应该比内联语句更快,尤其是插入这么多行时。以上就是C#学习教程:HowtorecyclemySqliteCommandtospeedupthisSqlitebatchinsert(iOS)?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: