asp.net - 如何在 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);});
解决方案
缓慢可能来自以下来源:
- 数据库
- 应用服务器
- 应用
- 服务器端网络
- 响应大小
- 网络连接
- 浏览器
数据库
您将需要直接在数据库中运行 LINQ 生成的查询。如果它很慢,那么您有一个数据库级别的性能问题。在这种情况下,您需要查看数据库的架构、所涉及的表的大小以及查询本身。很明显,您有一个过滤器Sector
。你有这个领域的索引吗?如果不是,那么创建一个也没有什么坏处。由于将计算索引,这将提高读取操作的速度,但会降低写入操作的速度。但是,读取通常比写入频繁得多。看看正在加载的列。是否有任何列包含大数据的长文本?
应用服务器
您的 IIS 是否设置为按顺序处理请求?其他站点是否在同一台服务器上运行?
应用
您需要在此处放置一个断点以确保这确实是需要很长时间的操作。如果是这种情况,那么很可能是数据库问题,但不一定。例如,如果您执行此操作很多时间,s。如果这没有您想象的那么慢,那么缓慢可能来自应用程序中的其他地方。可能是另一个查询,或者,如果您多次执行此查询,您可能需要修改查询以加载批量数据。
服务器端网络
您可能需要检查网络服务器端。如果一条消息通常从路由器到达服务器并返回的速度很慢,那么这也可能是您的特定情况的原因。
响应大小
它可能take
非常大,或者每一行都有很长的文本,并且数据需要很长时间才能下载。在这种情况下,您可能希望最初发送前 10 个结果,然后在用户查看前 10 个时加载其余结果。
网络连接
如果您或您的服务器的互联网连接非常慢,那也可能是与编程无关的问题。
浏览器
您正在通过 jquery 附加数据。如果将其替换console.log('foo');
为,性能会提高很多吗?在这种情况下,您的结构可能非常复杂,有很多事件,导致您的浏览器永远加载东西。
推荐阅读
- python - cppyy 模板类实例化没有虚拟析构函数
- python - 如何用列的平均值填充 numpy 数组 nan 值?
- javascript - 如何在 process.stdin.setRawMode(true) nodejs 中使用退格键
- image - 怎么换png
- java - android studio中tensorflow-lite中的GPU委托问题
- php - 是否可以将 add_image_size 与 get_theme_file_uri 一起使用?
- java - 我有两个 id,在将第一个 id 附加到 url 并单击接受按钮后,我需要将第二个 id 附加到 Url 并且无法
- javascript - 在 React 中上传和预览视频
- c# - 为什么JsonResult需要同时实现IActionResult和IStatusCodeActionResult?
- javascript - (Javascript)如何遍历所有 JSON 对象但只获取特定值?