Windows Phone上的简单SQLite SELECT查询在高端设备上非常慢(Lumia 930)。
select * from tableName
它提取了大约15000条记录(是的,我需要它们全部)并且通常我预计它不会这么慢。但是,获取所有记录大约需要12-13秒。我使用的是SQLite.Net-PCL客户端。
可能导致什么?是due to the very slow wrapper这是真的吗?是否有解决方法,有任何改进方法吗?
编辑:我尝试使用SQLite PCL from Microsoft Open Technologies并按属性手动映射属性,我得到了更好的结果。因此,似乎行数,列数和反射数都会导致事情变慢。我现在正在尝试通过SQLite.NET-PCL(我正在使用的库)公开类似的功能,以了解它将如何发展。
EDIT2:我将彼得的答案标记为我的问题的答案,因为我能够通过使用准备调用和逐行逐步手动映射类型来显着提高性能。
答案 0 :(得分:1)
SQLite可以在Windows Phone上轻松地从一个简单的表中返回15,000条记录(在Lumia 920上测试)。
还有其他因素导致你的表现不佳。如果您有大量列,那可能是个问题。根据SQLite包装器的实现方式(我不知道),两个可能的罪魁祸首是使用Reflection来填充结果对象或每行Async
开销。但同样,我不知道该包装器是如何实现的。
加快速度的方法(除了返回更少的数据)是用C ++编写代码并将其包装在WinRT组件中,以便托管应用程序调用。
答案 1 :(得分:0)
取决于您希望从实体获得哪些信息,您可以尝试使用Query<>()
方法编写原始SQL查询,然后您只能选择您感兴趣的字段并将其映射到较轻的实体(如果有是可能的,即使您获得权限Query<>()
的所有字段仍然应该更快。
还要检查您是否使用lates SQLite驱动程序用于WP