【发布时间】: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