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

时间:2012-08-26 15:15:01

标签: c# entity-framework sql-server-ce

我正在使用SQL Server Compact Edition 4.0作为我的数据库并使用Entity Framework。我有一个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<Account>方法没有性能下降。

我理解使用实体将查询数据库并创建一些开销 - 但使用本地数据库(即没有网络问题等)和10行数据,我原以为它可以忽略不计。

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

我必须错过一些简单的事 - 如果有人能够启发我,我会非常感激。

1 个答案:

答案 0 :(得分:0)

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

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

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