我正在调用单个查询,以使用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);
答案 0 :(得分:2)
缓慢可能来自以下来源:
您需要直接在数据库中运行LINQ生成的查询。如果速度很慢,那么您就会遇到数据库级性能问题。在这种情况下,您需要查看数据库的模式,所涉及的表的大小以及查询本身。很明显,您有Sector
的过滤器。你有这个领域的索引吗?如果不是,创建一个就不会有什么坏处。这将提高读取操作的速度,但由于将计算索引,因此降低了写入操作的速度。但是,读取通常比写入更频繁。看看正在加载的列。是否有任何列包含大数据的长文本?
您的IIS是否设置为按顺序处理请求?其他网站是否在同一台服务器上运行?
你需要在那里放一个断点,以确保这确实是需要很长时间的操作。如果是这种情况,则很可能是数据库问题,但不一定如此。例如,如果你执行这个很多时间,s。如果这不像你想象的那么慢,那么缓慢可能来自应用程序中的另一个地方。或许是另一个查询,或者,如果您多次执行此查询,则可能需要修改查询以加载批量数据。
您可能想要检查网络服务器端。如果一般消息从路由器到达服务器并且返回的速度很慢,那么这也可能是您特定情况的原因。
take
可能非常大,或者每行中都有一个长文本,数据需要花费大量时间才能下载。在这种情况下,您可能希望最初发送前10个结果,并在用户查看前10个结果时加载其余结果。
如果您或您的服务器的互联网连接速度非常慢,那么这也可能与您的问题不是编程相关的原因。
您正在通过jquery追加数据。如果用console.log('foo');
替换它,性能会提高很多吗?在这种情况下,您的结构可能会因很多事件而变得非常复杂,导致您的浏览器永远加载内容。