我的应用有问题。加载时间从500毫秒到5秒不等,在极端情况下10秒,这对我来说有点奇怪,因为我是网络开发的新手。 加载我的页面如下所示:
AD服务器会导致这样的延迟吗?
即使我关闭身份验证页面也会在3秒钟内加载,当你看到时可能很无聊 “等待localhost”标志:)
以下示例,无需身份验证即可平均加载3秒。 控制器方法:
public ActionResult Index(string name, string surname ,string deviceName, string deviceManufacturer)
{
var deviceusages = db.DeviceUsages.Include(d => d.DeviceInstance).Include(d => d.Storage).Include(d => d.User).Where(w=>w.UserId!=6);
if(name!="" && name!=null)
{
deviceusages = deviceusages.Where(w => w.User.Name.Contains(name));
}
if (surname != "" && surname != null)
{
deviceusages = deviceusages.Where(w => w.User.Surname.Contains(surname));
}
if (deviceName != "" && deviceName != null)
{
deviceusages = deviceusages.Where(w => w.DeviceInstance.Device.Name.Contains(deviceName));
}
if (deviceManufacturer!= "" && deviceManufacturer != null)
{
deviceusages = deviceusages.Where(w => w.DeviceInstance.Device.Manufacturer.Contains(deviceManufacturer));
}
return View(deviceusages.ToList());
}
和cshtml页面:
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.DeviceInstance.Device.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.DeviceInstance.Device.Manufacturer)
</th>
<th>
@Html.DisplayNameFor(model => model.Storage.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.User.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.User.Surname)
</th><th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.DeviceInstance.Device.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.DeviceInstance.Device.Manufacturer)
</td>
<td>
@Html.DisplayFor(modelItem => item.Storage.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.User.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.User.Surname)
</td>
<td>
@Html.ActionLink("Details", "Details", new { id=item.DeviceInstanceId })
@if (item.UserId == 1)
{
@Html.Raw("| ")
@Html.ActionLink("Claim", "ClaimDevice", new { id = item.DeviceInstanceId })
}
</td>
</tr>
}
</table>
现在我的问题我做错了什么或我的加载时间还可以,我只是新手
答案 0 :(得分:1)
最初,这是作为评论开始的,但我想我可以将其形成一个答案。首先,你并没有真正做错任何事情,但我可以指出可以提高代码速度的地方。
您正在加入相当数量的表格。这将导致SQL比单个表/几个连接表慢。
.Contains()
方法对应于SQL语法中的LIKE
。这比实际值匹配(=
)慢。您可以考虑向用户提供下拉列表以进行搜索,以便他们a)不需要知道名称,并且b)他们可以快速查看可能的值。
“AD会导致减速” - 可能。这取决于您的基础设施的维护和布局情况,以及您的网络人员。如果您的AD / LDAP服务器负载很重(因为它运行的是Exchange,SQL和DNS等),响应速度可能会很慢,但这不是代码问题。
最有可能的是,您的调试器实际上导致您的速度减慢。我注意到EF 6的运行速度比以前版本的调试器慢得多。如前所述,我们的生产应用程序在本地主机上运行大约2s,在发布模式下运行150-200ms,在非常出色的Web服务器硬件上运行。
不是每次都询问AD,也许你会问一次,然后将AD结果缓存在cookie或类似的东西中。这样可以减少每个请求的应用外部请求。
所以,总而言之,不 - 你似乎没有做错任何事。在我看来,你确实有改进的余地,但我不会太担心它,直到你真的可以在服务器上和localhost之外获得它并测试你的应用程序。