繁体   English   中英

性能差的Sqlite.net扩展

[英]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 在某些情况下,这可能会产生很大的影响。
  • SQLite.Net一对一地执行插入操作 :这是一种解决方法,很复杂,因为它要求您手动编写插入查询才能对每个语句执行多个插入。
  • SQLite-Net扩展在插入后执行update操作 :这很容易解决,您可以自己分配外键,并在数据库密集型操作上调用普通的SQLite.Net Insert

您可以使用WAL模式提高插入性能:

 var journalMode = await globalConn.ExecuteScalarAsync<string>("PRAGMA journal_mode = wal");

这是一个建议:

尝试使用原始查询,或者实际上,首先分析代码,也许其中存在瓶颈。

而且,如果您一无所获,我想您只需要异步执行并让用户等待即可( 或将数据库文件与您的应用一起交付

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM