首页 > 解决方案 > 如何在 LINQ Instantly 中优化单个查询以多次调用?

问题描述

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

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);

阿贾克斯调用

$.ajax({ url: "/Home/NewsBySectorTitle?sector=10, dataType: "html" }).done(function (data) {$("#col1").append(data);});

标签: asp.netajaxasp.net-mvcentity-frameworklinq

解决方案


缓慢可能来自以下来源:

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

数据库

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

应用服务器

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

应用

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

服务器端网络

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

响应大小

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

网络连接

如果您或您的服务器的互联网连接非常慢,那也可能是与编程无关的问题。

浏览器

您正在通过 jquery 附加数据。如果将其替换console.log('foo');为,性能会提高很多吗?在这种情况下,您的结构可能非常复杂,有很多事件,导致您的浏览器永远加载东西。


推荐阅读