【问题标题】:SQLite Net PCL slow SELECT querySQLite Net PCL 慢 SELECT 查询
【发布时间】:2019-07-01 21:36:11
【问题描述】:

我在 Xamarin.Android 应用程序上使用 SQLite,当我选择表上的所有记录(大约 44000 条)时,大约需要 25000 毫秒,因此,每秒大约 1700 次选择。

选择不应该更快吗?我尝试了一些不同的方法并设法将时间从 27000 毫秒缩短到 25000 毫秒。

代码如下:

    public List<T> SelectAll() 
    {
        try
        {
            using (var conn = new SQLiteConnection(DATABASE_PATH, true))
            {
                Stopwatch w = new Stopwatch();
                w.Start();

                conn.BeginTransaction();
                var result = conn.Table<T>.ToList();
                conn.Commit();


                w.Stop();
                var millis = w.ElapsedMilliseconds;
                return result;
            }
        }
        catch (SQLiteException ex)
        {
            Log.Info(TAG + " - " + SUB_TAG, "There was an exeption selecting data from database: " + ex.Message);
            throw;
        }
    }

我尝试从表中选择所有行的方式有问题吗?

我尝试使用conn.Table().ToList(),但都差不多,只是相差100ms

【问题讨论】:

  • 一行有多少列?您大约加载多少数据?你在使用 SqliteExtensions 吗?
  • 目前已经有28列了,不知道以后需要时能不能变大。数据量?你在谈论数据的大小吗?它不应该太多,因为大多数字段大部分时间都是空的。我正在使用 SQLite-net-pcl nuget 包,但仅此而已。
  • 我自己使用的是 SQLite-net-pcl,但我没有这些性能问题。但是话又说回来,我目前没有很多数据。我会尝试增加我的数据来测试它。是仅在特定设备上进行还是您测试了不同的设备(android、IOS、真实设备、模拟器……)?
  • 目前它是一个只有安卓的应用程序,所以它是基于 Xamarin android 构建的,但我已经在 2 台设备上尝试过,诺基亚 7 2016 和小米红米 5,两者都不是手机弱到查询速度很慢
  • 我发现问题出在哪里,这是 ToList() 方法的问题,当我尝试不使用它时需要 16 毫秒,但我只得到一个 Enumerable,而我想要我的实体类型...

标签: c# android sqlite xamarin.android


【解决方案1】:

离开泛型类型至少是不寻常的。由于您已经知道要从哪个表查询,因此最好使用conn.Query&lt;yourType&gt; 而不是conn.Query&lt;T&gt;
List&lt;T&gt; 也一样。
希望对您有所帮助。

【讨论】:

  • 在查询中我正在写“FROM Evento”,但这只是测试它是否会提高性能,这是 T 型的基类,所以那里有很多通用方法,我'将更正代码。顺便说一句,我已经尝试过使用我正在使用的表的类型进行查询,性能是一样的,1700 条记录/秒是否正常?
猜你喜欢
  • 2023-04-10
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2018-07-11
  • 2023-03-19
  • 2012-03-06
  • 2019-05-24
相关资源
最近更新 更多