Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite在Windows Phone上的选择速度非常慢_Sqlite_Windows Phone 8_Windows Phone 8.1 - Fatal编程技术网

SQLite在Windows Phone上的选择速度非常慢

SQLite在Windows Phone上的选择速度非常慢,sqlite,windows-phone-8,windows-phone-8.1,Sqlite,Windows Phone 8,Windows Phone 8.1,Windows Phone上的简单SQLite SELECT查询在高端设备(Lumia 930)上非常慢 它大约有15000条记录(是的,我需要全部记录),通常我希望它不会这么慢。然而,获取所有记录大约需要12-13秒。我正在使用SQLite.Net-PCL客户端 是什么引起的?这是真的吗?有没有解决办法,有没有改进的方法 编辑:我尝试使用并手动按属性映射属性,得到了更好的结果。因此,行数、列数和反射,所有这些加在一起,似乎都会导致速度减慢。我现在正在尝试通过SQLite.NET-PCL(我正在

Windows Phone上的简单SQLite SELECT查询在高端设备(Lumia 930)上非常慢

它大约有15000条记录(是的,我需要全部记录),通常我希望它不会这么慢。然而,获取所有记录大约需要12-13秒。我正在使用SQLite.Net-PCL客户端

是什么引起的?这是真的吗?有没有解决办法,有没有改进的方法

编辑:我尝试使用并手动按属性映射属性,得到了更好的结果。因此,行数、列数和反射,所有这些加在一起,似乎都会导致速度减慢。我现在正在尝试通过SQLite.NET-PCL(我正在使用的库)公开类似的功能,以了解这将如何进行


EDIT2:我将Peter的答案标记为我问题的答案,因为我能够通过使用Prepare call手动映射一个类型一个类型并逐行执行来显著提高性能。

取决于您希望从您的实体获得什么信息,您可以尝试使用
Query()
方法,允许您编写原始SQL查询,然后您可以只选择感兴趣的字段,并将其映射到较轻的实体(如果可能的话),即使您获得了实体的所有字段仍然应该更快。

还要检查您是否正在使用最新的SQLite驱动程序进行WP

SQLite可以在Windows Phone(在Lumia 920上测试)上在几分之一秒内轻松地从一个简单的表返回15000条记录

还有其他因素导致你表现不佳。如果您有大量的列,这可能是一个问题。根据SQLite包装器的实现方式(我不知道),两个可能的罪魁祸首是使用反射填充结果对象或每行
Async
开销。但是,我也不知道包装器是如何具体实现的


加快速度(除了返回更少的数据)的方法是在C++中编写代码并将其封装在由管理程序调用的WRET组件中。

为什么你一次都需要它们,你需要所有的列吗?除非我在高端服务器上别无选择,否则我不会这么做……你的应用程序真的能够一次在手机屏幕上显示所有15000条记录的信息吗?我已经在使用
Query
执行原始查询了。我没有使用最新的SQLite驱动程序,因为最新的驱动程序在执行UpdateAll/InsertAll时抛出SQLite逻辑错误,但我尝试将其仅用于查询,获取实体需要相同的时间。您能告诉我哪些库和哪个包装器(如果可能,确切的版本)您是否曾经验证过可以如此快速地获得15000个查询?我也想尝试一下,看看这些是否导致了我的问题。我尝试将列数减少到2,但仍然需要3秒钟,这仍然非常糟糕(而且我没有所需的所有数据:)。获得最佳性能的方法是不直接对C API使用包装器写入。我使用自己的定制库运行SQLite 3.8.7.4,我将此标记为答案,因为手动映射类型帮助我显著提高了性能。
select * from tableName