【发布时间】:2016-02-15 15:58:59
【问题描述】:
我有一个像这样的简单操作方法:
public class TestApiController : ApiController
{
[Route("api/string"), HttpGet]
public string GetString(int length)
{
return new string('x', length);
}
}
响应时间(由 Fiddler 观察):
GET /api/string?length=1186
0.008
0.007
0.007
...
GET /api/string?length=1187
0.208
0.212
0.205
...
也就是说,通过在响应中添加单个字节,处理时间增加了 40 倍。
这种行为是绝对一致的,我在 Visual Studio 的 Web 服务器和 IIS 8.5 中都观察到它(但是,具体的响应大小阈值略有不同)。
到底为什么会这样?
编辑:就我而言,检查 HTTP 协议的 ESET NOD32 防病毒软件是罪魁祸首。
【问题讨论】:
-
看起来问题出在您的环境中的某个地方。我已经在我的笔记本电脑上尝试过这种操作方法,对于所有合理的长度(50 - 500000),每次请求总是只需要几毫秒。因此,提供环境详细信息会很有帮助(操作系统、websever、.net 和 asp.net 版本、应用程序和服务器配置)。
-
除了1186和1187还有其他响应时间差吗?
-
关闭防病毒并检查。这不是开玩笑,它可能不知道这是什么,并且正在进行更大的扫描
-
我的猜测是您正在跨越某些数据缓冲区或缓存逻辑的边界。这也可以解释为什么 dev 与 server 中的值不同。为了获得更好的图片,您需要绘制更多数据点。创建越来越大的响应,看看响应时间在初始碰撞后是否会增加。如果是这样,它或多或少是线性的?还是它也跳到其他阈值?如果只有第一次跳转,那么 ASP 可能对您刚刚跨越的“小请求”进行了一些优化。
-
@Sebastian506563 谢谢,没错。关闭防病毒软件解决了这个问题。请添加答案,以便我接受。
标签: asp.net iis asp.net-web-api