IIS / ASP.NET故意响应同步请求的速度慢于单个请求吗?

时间:2018-01-29 10:46:41

标签: asp.net performance iis asp.net-web-api

IIS(或可能是ASP.NET)在与其他请求同时发送请求时需要更长的时间来响应请求。例如,如果网页同时发送请求A以及其他20个请求,则需要500毫秒,但是当此请求被发送时,需要400毫秒。

此功能有名称吗?它在IIS或ASP.NET中?我可以禁用或更改它吗?使用它有什么好处吗?

注意:

  • 我在ASP.NET Web API应用程序上看到了这个问题。
  • 我检查过IIS设置(Windows Server 2012 R2上的IIS 8.5),但没有发现任何限制其吞吐量的内容。像band-with和CPU限制这样的所有约束都是很高的。服务器也有很好的硬件。

更新1: 所有请求都将从数据库中读取内容。我在Chrome开发人员的控制台中查看了它们。还创建了一个简单的C#应用程序,它向服务器发出多个并行请求。当它们真正并行时,它们需要很长时间,但是当每次呼叫之间等待时,响应时间会急剧减少。

更新2: 我的应用程序中有一个简单的方法,它只发送一个Ok

[AllowAnonymous]
public IHttpActionResult CheckOnline()
{
    return Ok();
}

此处存在相同的行为。在我的自定义C#测试仪中,如果我同时多次调用此路由,则需要超过1000毫秒完成,但在每次调用之间等待5秒时,响应时间将降至20毫秒以下。 此方法不受IO或CPU限制。似乎IIS检测到这些请求来自单个特定用户/客户端,因此不要过多关注它。

1 个答案:

答案 0 :(得分:1)

如果在应用程序中使用ASP.NET Session,请求将逐个排队并处理。因此,在处理先前的请求时,最后一个请求可以保留在队列中。

另一个可能的原因是ASP.NET Thread Pool中的所有线程都很忙。在这种情况下,将创建一个新线程来处理需要额外时间的新请求。

这只是一个理论(或我的想法)。任何其他原因都是可能的。