我使用实体框架创建了一个开箱即用的项目(ASP.NET Core4.6.2),并添加了一个简单的数据模型(book)。这本书有名字、描述和价格。我向数据库( Server 2016)添加了一些示例数据,以测试视图的速度。linq查询花了不到一秒时间返回58K记录。然后,控制器立即将结果传递给视图。视图旋转大约3分钟,然后超时并返回一个502.3 Bad Gateway。
我的印象是Core非常快,能够处理非常大的数据集(超过2-6米)。如果您需要一个代码示例,下面是:
BooksController.cs:
var books = db.Books.ToList();
return View(books);Index.cshtml:
@model IEnumerable<TestCoreApp.Models.Book>
<h2>Index</h2>
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th>
@Html.DisplayNameFor(model => model.Price)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>发布于 2017-03-20 22:28:21
系统只有在其代码允许的情况下才能强大。改进响应时间的两种简单/快速的方法是:
1)使View异步。
2)当不对当前视图中的数据进行任何更改时,将数据库查询标记为“无跟踪”。将此标志添加到查询使其不跟踪对数据的更改。因此,如果您确实进行了更新,context.SaveChanges()将不会保存它们。如果您的视图没有任何编辑功能,那么它应该始终存在。
从我正在开发的应用程序中使用我自己的Index视图:
public async Task<IActionResult> Index(bool hideDisabledUsers = true) {
ViewData["hideDisabledUsers"] = hideDisabledUsers;
var employeeList = _context.Employees
.OrderBy(e => e.LastName);
if (hideDisabledUsers)
employeeList = employeeList.Where(e => e.AccessLevel != AccessType.Disabled);
return View(await employeeList.AsNoTracking().ToListAsync());
}注意更改的方法签名和返回类型,以及LINQ查询是如何分步骤构建的。查询直到.ToListAsync()才真正命中数据库
其他人可能能够提供更多关于性能的技术答案,或者更多的方法使其具有表现力,但是使用这两种方法应该会显着地改进您的测试。
https://stackoverflow.com/questions/42914672
复制相似问题