[英]Poor Performance Sqlite.net extensions
嗨,我正在开发Xamarin应用程序,该应用程序可以加载很多行(大约1万行)
我的性能真的很差,比如插入对象的5K行需要2分钟。
我使用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
。 在某些情况下,这可能会产生很大的影响。 update
操作 :这很容易解决,您可以自己分配外键,并在数据库密集型操作上调用普通的SQLite.Net Insert
。 您可以使用WAL模式提高插入性能:
var journalMode = await globalConn.ExecuteScalarAsync<string>("PRAGMA journal_mode = wal");
这是一个建议:
尝试使用原始查询,或者实际上,首先分析代码,也许其中存在瓶颈。
而且,如果您一无所获,我想您只需要异步执行并让用户等待即可( 或将数据库文件与您的应用一起交付 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.