使用 SQL Server CE 4.0 的简单实体查询慢

Posted

技术标签:

【中文标题】使用 SQL Server CE 4.0 的简单实体查询慢【英文标题】:Simple entity query using SQL Server CE 4.0 slow 【发布时间】:2012-08-26 15:15:00 【问题描述】:

我使用 SQL Server Compact Edition 4.0 作为我的数据库并使用实体框架。我有一个 DataGrid 可以进行一些计算(使用 8 列 x 10 行的测试数据,每行执行一次计算,因此只执行 10 次)。

如果我使用任何实体查询,calc 方法会明显变慢。当我删除它们时,结果是即时的(无法辨别时间延迟)。

考虑这一行代码:

Account a = (from accounts in context.Account select accounts).FirstOrDefault();

我没有这样做,而是从context.Account 获取数据并将其放入列表中,然后再点击执行计算的方法:

List<Account> accountsTable = context.Account.ToList();

然后用这行代码替换上面的代码行,除了查询列表而不是实体之外,它做同样的事情:

Account a = (from accounts in accountsTable select accounts).FirstOrDefault();  

使用List&lt;Account&gt; 方法没有性能下降。

我知道使用实体会查询数据库并产生一些开销 - 但使用本地数据库(即没有网络问题等)和 10 行数据,我认为它可以忽略不计。

我看过这篇文章:SQL Server CE 4.0 Entity Framework, query runs realy slow (compared with SQL Server CE 3.5),但这不是这里的问题。

我一定遗漏了一些简单的东西 - 如果有人能启发我,我将非常感激。

【问题讨论】:

【参考方案1】:

使用以下内容是否有性能提升:

using System.Linq;
Account a = context.Account.FirstOrDefault();

我怀疑您的查询首先被解析(到列表),然后传递给 FirstOrDefault。我相信直接运行FirstOrDefault 会导致您的代码读取更少的记录,从而获得更好的性能。

【讨论】:

以上是关于使用 SQL Server CE 4.0 的简单实体查询慢的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sql Management Studio 2008 连接到 Sql Server CE 4.0 时出现问题

如何让实体数据模型与 SQL Server CE 4.0 一起使用?

在 SQL Server CE 4.0 中使用 COUNT 进行比较

SQL Server CE 4.0 和频繁损坏的内存崩溃

SQL Server CE 4.0 本地缓存代理?!英孚支持?

将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0