如何在LINQ中优化单个查询多次调用?

时间:2018-06-03 15:14:26

标签: asp.net ajax asp.net-mvc entity-framework linq

我正在调用单个查询,以使用Ajax在我的Web应用程序的主页上获取多个类别数据。但它的表现很糟糕。如何改进?

readArr

Ajax Call

var result = _db.news.Where(a => a.Sector == sector)
    .OrderByDescending(a => a.ModifiedOn)
    .Select(a => new LatestNewsView { 
        Id = a.Id, 
        Title = a.Title, 
        CreatedOn = a.ModifiedOn, 
        ImageUrl = a.ImageUrl, 
        Sector = a.SubTitle, 
        Country = a.Country, 
        NewId = a.NewsId 
    })
    .AsNoTracking().Skip(skip).Take(take);

1 个答案:

答案 0 :(得分:2)

缓慢可能来自以下来源:

  • 数据库
  • 应用程序服务器
  • 应用
  • 服务器端网络
  • 响应大小
  • 互联网连接
  • 浏览器

数据库

您需要直接在数据库中运行LINQ生成的查询。如果速度很慢,那么您就会遇到数据库级性能问题。在这种情况下,您需要查看数据库的模式,所涉及的表的大小以及查询本身。很明显,您有Sector的过滤器。你有这个领域的索引吗?如果不是,创建一个就不会有什么坏处。这将提高读取操作的速度,但由于将计算索引,因此降低了写入操作的速度。但是,读取通常比写入更频繁。看看正在加载的列。是否有任何列包含大数据的长文本?

应用程序服务器

您的IIS是否设置为按顺序处理请求?其他网站是否在同一台服务器上运行?

应用

你需要在那里放一个断点,以确保这确实是需要很长时间的操作。如果是这种情况,则很可能是数据库问题,但不一定如此。例如,如果你执行这个很多时间,s。如果这不像你想象的那么慢,那么缓慢可能来自应用程序中的另一个地方。或许是另一个查询,或者,如果您多次执行此查询,则可能需要修改查询以加载批量数据。

服务器端网络

您可能想要检查网络服务器端。如果一般消息从路由器到达服务器并且返回的速度很慢,那么这也可能是您特定情况的原因。

响应大小

take可能非常大,或者每行中都有一个长文本,数据需要花费大量时间才能下载。在这种情况下,您可能希望最初发送前10个结果,并在用户查看前10个结果时加载其余结果。

互联网连接

如果您或您的服务器的互联网连接速度非常慢,那么这也可能与您的问题不是编程相关的原因。

浏览器

您正在通过jquery追加数据。如果用console.log('foo');替换它,性能会提高很多吗?在这种情况下,您的结构可能会因很多事件而变得非常复杂,导致您的浏览器永远加载内容。