【发布时间】:2010-05-21 05:37:19
【问题描述】:
我正在使用 LinqToSql 查询一个小型、简单的 SQL Server CE 数据库。
我注意到任何涉及子属性的操作都慢得令人失望。
例如,如果我有一个由Order 表引用的Customer 表,LinqToSql 将自动创建一个EntitySet<Order> 属性。这是一个很好的方便,允许我做类似Customer.Order.Where(o => o.ProductName = "Stopwatch") 的事情,但由于某种原因,当我尝试做这样的事情时,SQL Server CE 挂起非常糟糕。我的一个查询并不那么复杂,需要 3-4 秒才能完成。
如果我只是单独抓取两个表并将它们转换为List<Customer> 和List<Order>,然后使用我自己的查询手动加入,我可以将速度提高到可接受的甚至更快,但这需要很多额外的代码。 LinqToSql 自动生成这些EntitySet<T> 属性——我想使用它们。
那么,我该如何提高性能呢?例如,是否有任何DataContext 选项会有所帮助?
注意:我的数据库在初始状态下只有大约 250K,我预计它不会增长到超过 1-2Mb。所以,记录不是很多。
更新
以下是我在问题中使用的示例的表定义:
create table Order
(
Id int identity(1, 1) primary key,
ProductName ntext null,
Quantity int null
)
create table Customer
(
Id int identity(1, 1) primary key,
OrderId int null references Order (Id)
)
【问题讨论】:
标签: linq performance linq-to-sql sql-server-ce