0
IQueryable<WebEvent> mySearch = 
    eventDC.GetBooks()
        .Where(p => p.Price.Any(d => d.EventDatetime.Month == fromDate.Month 
                                     && d.EventDatetime.Year == fromDate.Year))
        .WithGroup(groupId)
        .OrderBy(p => p.Price.Where(r => r.Datetime >= fromDate)
                             .OrderBy(q => q.Datetime)
                             .FirstOrDefault().Datetime);
List<Book>ventsList = mySearch.ToList<Book>();

我们有这么长的查询,取书和排序耗费时间,经过性能测试,发现包含该查询的页面的响应时间超过10秒,我们需要设法解决这个问题并减少响应时间。

有人有什么建议吗?

4

2 回答 2

1

你到底想做什么?你能告诉我这里的模式吗?

这对我来说似乎是一个奇怪的陈述,因为我不知道架构:

p => p.Price.Any(d => d.EventDatetime.Month...

但是,我要在这里暗中试一试,并说您可能对以下内容有疑问:

eventDC.GetBooks()

如果该方法调用存储过程或以其他方式对数据库执行“Select * From Books”,那么您实际上在做的是:

  1. 从数据库中选择所有书籍
  2. 获取结果列表并从中仅选择您想要的书籍

如果是这种情况,那么这可能是您最大的问题。

于 2010-01-08T15:32:22.523 回答
0

通常检查 SQL 以查看其生成的内容,您可以内联执行此操作。有一个工具可以帮助你做到这一点,它叫做 LinqPad,你可以创建一个 LINQ 查询并调整 LINQ 查询。另外,寻找添加索引的地方;这也可以提高性能(太多的索引会损害性能,所以也要小心)。

于 2010-01-08T16:18:40.107 回答