C# Sqlite数据库查询需要很长时间WP8

C# Sqlite数据库查询需要很长时间WP8,c#,sql,database,sqlite,windows-phone-8,C#,Sql,Database,Sqlite,Windows Phone 8,我正在使用sqlite.net构建一个Windows Phone 8应用程序,使用此链接作为参考:- 项目中有一个数据库,该数据库正在隔离存储中播种。该数据库只包含一个表,其中包含近26k个条目 我正在尝试连接到MainPage.xaml.cs中的该数据库,如下所示:- protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e

我正在使用sqlite.net构建一个Windows Phone 8应用程序,使用此链接作为参考:-

项目中有一个数据库,该数据库正在隔离存储中播种。该数据库只包含一个表,其中包含近26k个条目

我正在尝试连接到MainPage.xaml.cs中的该数据库,如下所示:-

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    using (SQLiteConnection db = new SQLiteConnection(App._dbPath))
    {
        db.GetTableInfo("IWMCemeteries");
        try
        {
            List<IWMCemeteries> cemeteriesList = db.Table<IWMCemeteries>().ToList<IWMCemeteries>();
             MessageBox.Show("Number of elements in table is " + cemeteriesList.Count);
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
    }
}
List<IWMCemeteries> cemeteries = db.Query<IWMCemeteries>("select * from IWMCemeteries");
MessageBox.Show("Number of elements in list is " + cemeteries.Count);
受保护的覆盖无效OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
基地。导航到(e);
使用(SQLiteConnection db=newsqliteconnection(App.\u dbPath))
{
db.GetTableInfo(“IWMCemetries”);
尝试
{
列出墓地列表=db.Table().ToList();
MessageBox.Show(“表中的元素数为”+CemeteresList.Count);
}
捕获(例外情况除外)
{
Debug.WriteLine(例如消息);
}
}
}
问题是消息对话框显示的时间太长(超过25秒)

我尝试了另一种运行原始查询的方法,如下所示:-

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    using (SQLiteConnection db = new SQLiteConnection(App._dbPath))
    {
        db.GetTableInfo("IWMCemeteries");
        try
        {
            List<IWMCemeteries> cemeteriesList = db.Table<IWMCemeteries>().ToList<IWMCemeteries>();
             MessageBox.Show("Number of elements in table is " + cemeteriesList.Count);
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
    }
}
List<IWMCemeteries> cemeteries = db.Query<IWMCemeteries>("select * from IWMCemeteries");
MessageBox.Show("Number of elements in list is " + cemeteries.Count);
列出墓地=db.Query(“从iwmcemetries中选择*);
MessageBox.Show(“列表中的元素数为”+cemmees.Count);
但这似乎需要更长的时间!(将近30秒)

有人能告诉我我做错了什么吗

谢谢


拉吉耶夫

您的查询没有问题。只需限制从数据库获取的数据。这是一款功率有限的移动设备,不是一台成熟的pc。

您的查询没有问题。只需限制从数据库获取的数据。这是一款功率有限的移动设备,而不是一台成熟的pc。

对我来说没什么问题。正如一些人所注意到的,有了26k行,您开始处理大量有趣的数据。因此,在使用“lite”数据库的移动设备中,您必须根据实际需要调整请求:

  • 您需要行数,然后使用SELECT COUNT(*)
  • 您希望显示列表中的所有行,然后使用分页或异步加载(向下滚动)每次仅获取20个元素

在任何应用程序中,但大多在移动设备中,你必须考虑移动的数据量。


这样,任何请求都将是即时的,您的应用程序将运行良好。

我认为这里没有问题。正如一些人所注意到的,有了26k行,您开始处理大量有趣的数据。因此,在使用“lite”数据库的移动设备中,您必须根据实际需要调整请求:

  • 您需要行数,然后使用SELECT COUNT(*)
  • 您希望显示列表中的所有行,然后使用分页或异步加载(向下滚动)每次仅获取20个元素

在任何应用程序中,但大多在移动设备中,你必须考虑移动的数据量。


这样,任何请求都是即时的,您的应用程序将运行良好。

如果您只想显示26000个元素的计数,为什么要在内存中加载它们?i、 e.
从iwmcemetries中选择count(*)
?感谢您的回答。count语句只是一个测试。我实际上需要应用程序中的所有数据。是否仍有优化查询/数据库的方法?不要在移动设备的内存中加载26000个类实例,请重新思考您的应用程序设计。感谢您的输入。我将更改设计,以便仅在需要时获取数据。如果只想显示26000个元素的计数,为什么要在内存中加载26000个元素?i、 e.
从iwmcemetries中选择count(*)
?感谢您的回答。count语句只是一个测试。我实际上需要应用程序中的所有数据。是否仍有优化查询/数据库的方法?不要在移动设备的内存中加载26000个类实例,请重新思考您的应用程序设计。感谢您的输入。我将改变设计,只有在我需要答案时才能获取数据。count语句只是一个测试。我实际上需要应用程序中的所有数据。是否还有优化查询/数据库的方法?没有,因为它只有一个表,没有使查询“更重”的关系。您可以每次获取1000条记录,然后当用户滚动到控件底部显示数据时,获取下一个1000条记录。如果你想处理/显示所有数据,这是唯一的方法。谢谢你的回答。我将在我需要大量数据的应用程序中实现增量加载谢谢你的回答。count语句只是一个测试。我实际上需要应用程序中的所有数据。是否还有优化查询/数据库的方法?没有,因为它只有一个表,没有使查询“更重”的关系。您可以每次获取1000条记录,然后当用户滚动到控件底部显示数据时,获取下一个1000条记录。如果你想处理/显示所有数据,这是唯一的方法。谢谢你的回答。我将在我需要大量数据的应用程序中实现增量加载谢谢你的回答。我将改变应用程序设计,只获取我需要的数据。谢谢你的回答。我将更改应用程序设计,以仅获取我需要的数据