我正在使用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)但这不是问题所在。
我必须错过一些简单的事 - 如果有人能够启发我,我会非常感激。
答案 0 :(得分:0)
使用以下内容时是否有性能提升:
using System.Linq;
Account a = context.Account.FirstOrDefault();
我怀疑您的查询首先被解析(到列表),然后传递给FirstOrDefault。我相信直接运行FirstOrDefault
会导致您的代码读取的记录更少,从而提高性能。