您好我正在开发一个加载大量行(大约10K)的Xamarin应用程序
我的表现非常糟糕,例如2分钟插入一个物体的5K行。
我使用InsertOrReplaceWithChildren:
public bool Insert_Update_Many<T>(List<T> obj)
{
try
{
lock (this.Lock) {
_connection.RunInTransaction(() => {
_connection.InsertOrReplaceAllWithChildren(obj, true);
});
}
return true;
}
catch (Exception ex)
{
Debug.WriteLine("[SQLITE_ERROR]: " + ex.ToString());
return false;
}
}
由于我添加了“RunInTransaction”,我得到了改进(在5分钟之前+)。
我的对象包含关系。
有没有办法优化它?
答案 0 :(得分:3)
在没有看到实际代码的情况下很难分辨,但我遇到的问题可能会影响性能:
InsertOrReplace
性能不佳:尝试调用简单Insert
语句而不是InsertOrReplace
。在某些情况下,这可能会产生很大的影响。update
操作:这很容易解决,您可以自己分配外键并在数据库上调用纯SQLite.Net Insert
密集的行动。答案 1 :(得分:3)
您可以使用WAL模式提高插入效果:
var journalMode = await globalConn.ExecuteScalarAsync<string>("PRAGMA journal_mode = wal");
答案 2 :(得分:0)
这是一个建议:
尝试使用原始查询,或者实际上,首先对代码进行概要分析,也许在某处存在瓶颈。
如果你什么都没得到,我想你只需要做异步并让用户等待(或用您的应用程序发送数据库文件)