在Windows Mobile 6.5中查询SQL Server CE数据库文件的最快方法?

时间:2015-06-10 18:32:27

标签: dataset sql-server-ce windows-mobile windows-mobile-6.5 sqlcedatareader

我在Windows移动设备上有一个需要查询的大.sdf数据库文件。该文件有40,000条记录。我正在尝试减少执行查询所需的时间。目前它大约是8秒,这是用户等待结果的大量时间。

起初我一直在使用DataSet,建立SqlCeConnection并填充链接到数据集的适配器。同样尝试与DataTable类似,性能结果几乎相同。在大约8秒内使用DataSetDataTable完成的查询。

我尝试的最后一件事就是使用Reader()。它给了我一些更好的结果,但只有半秒钟(查询在~7.5秒内完成)。

string lastName;
lastName = "";
string connectionString = @"Data Source='/Path/To/MyDatabase.sdf' Max Database Size = 128; Max Buffer Size = 1024;";
string strSql = "SELECT LastName FROM employee_list WHERE LastName = 'Johnson'";

using (SqlCeConnection mConnection = new SqlCeConnection(connectionString))
{
    mConnection.Open();

    using (SqlCeCommand mCommand = new SqlCeCommand(strSql, mConnection))
    {
        using (SqlCeDataReader reader = mCommand.ExecuteReader())
        {
            while (reader.Read())
            {
                lastName = (string)reader["LastName"];
            }
        }

        mCommand.Dispose();
    }

    mConnection.Close();
    mConnection.Dispose();
}

任何想法如何才能让它更快?

1 个答案:

答案 0 :(得分:0)

我有类似的问题,但在iOS上我们需要查询超过100,000条记录。最初我们使用的技术......类似于Windows世界中的实体框架(称为CoreData)......执行时间超过15秒(查询中超过20个字段)。我们改变了这个:

1)它现在直接使用SQLite进行2部分查询。第1部分仅查询3个字段,并将其编入索引。

2)第2部分是后续运行的查询,它可以获取用户感兴趣的“真实细节”。

这对我们有用,因为用户首先只看到一个列表,此时不需要完整的数据集。只有在选择特定行时,它们才需要执行完整的“第2部分”查询。

不知道这是否对您有所帮助,但它将我们的查询时间减少到~1100 ms,这在我们的特定情况下是一个巨大的改进。