性能不佳 Sqlite.net 扩展
Poor Performance Sqlite.net extensions
你好,我正在开发一个 Xamarin 应用程序,它加载很多行(大约 10K)
我的性能非常差,大约需要 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 分钟以上之前)。
我的对象包含关系船。
有什么办法可以优化吗?
这里有一个建议:
尝试使用原始查询,或者实际上,首先分析代码,也许其中某处存在瓶颈。
如果您一无所获,我想您只需要异步执行并让用户等待(或将数据库文件与您的应用程序一起发送)
没有看到实际代码很难说,但我遇到了几个可能影响性能的问题:
InsertOrReplace
性能不佳:尝试调用简单的 Insert
语句而不是 InsertOrReplace
。在某些情况下,这可能会产生很大的影响。
- SQLite.Net 一个一个地执行插入操作:这个解决方法很复杂,因为它需要您手动编写插入查询以对每个插入操作执行多个插入声明。
- SQLite-Net Extensions 在插入后执行
update
操作:这个很简单,你可以自己分配外键并调用plain SQLite.Net Insert
数据库密集型操作。
您可以使用 WAL 模式提高插入性能:
var journalMode = await globalConn.ExecuteScalarAsync<string>("PRAGMA journal_mode = wal");
你好,我正在开发一个 Xamarin 应用程序,它加载很多行(大约 10K)
我的性能非常差,大约需要 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 分钟以上之前)。
我的对象包含关系船。
有什么办法可以优化吗?
这里有一个建议:
尝试使用原始查询,或者实际上,首先分析代码,也许其中某处存在瓶颈。
如果您一无所获,我想您只需要异步执行并让用户等待(或将数据库文件与您的应用程序一起发送)
没有看到实际代码很难说,但我遇到了几个可能影响性能的问题:
InsertOrReplace
性能不佳:尝试调用简单的Insert
语句而不是InsertOrReplace
。在某些情况下,这可能会产生很大的影响。- SQLite.Net 一个一个地执行插入操作:这个解决方法很复杂,因为它需要您手动编写插入查询以对每个插入操作执行多个插入声明。
- SQLite-Net Extensions 在插入后执行
update
操作:这个很简单,你可以自己分配外键并调用plain SQLite.NetInsert
数据库密集型操作。
您可以使用 WAL 模式提高插入性能:
var journalMode = await globalConn.ExecuteScalarAsync<string>("PRAGMA journal_mode = wal");