性能不佳的Sqlite.net扩展

时间:2016-04-21 15:36:03

标签: c# sqlite xamarin sqlite-net sqlite-net-extensions

您好我正在开发一个加载大量行(大约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分钟之前+)。

我的对象包含关系。

有没有办法优化它?

3 个答案:

答案 0 :(得分:3)

在没有看到实际代码的情况下很难分辨,但我遇到的问题可能会影响性能:

  • InsertOrReplace性能不佳:尝试调用简单Insert语句而不是InsertOrReplace。在某些情况下,这可能会产生很大的影响。
  • SQLite.Net逐个执行插入操作:这是一个复杂的解决方法,因为它要求您手动编写插入查询以在每个语句上执行多个插入。
  • SQLite-Net Extensions在插入后执行update操作:这很容易解决,您可以自己分配外键并在数据库上调用纯SQLite.Net Insert密集的行动。

答案 1 :(得分:3)

您可以使用WAL模式提高插入效果:

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

答案 2 :(得分:0)

这是一个建议:

尝试使用原始查询,或者实际上,首先对代码进行概要分析,也许在某处存在瓶颈。

如果你什么都没得到,我想你只需要做异步并让用户等待(或用您的应用程序发送数据库文件