将单字节添加到响应时,ASP.NET WebAPI输出会慢40倍

two*_*wer 16 asp.net iis asp.net-web-api

我有一个像这样的简单动作方法:

public class TestApiController : ApiController
{
    [Route("api/string"), HttpGet]
    public string GetString(int length)
    {
         return new string('x', length);
    }
}
Run Code Online (Sandbox Code Playgroud)

响应时间(由Fiddler观察):

GET /api/string?length=1186
  0.008
  0.007
  0.007
  ...

GET /api/string?length=1187
  0.208
  0.212
  0.205
  ...
Run Code Online (Sandbox Code Playgroud)

也就是说,通过向响应添加单个字节,处理时间增加了40倍.

这种行为绝对一致,我在Visual Studio的Web服务器和IIS 8.5中都观察到它(但是,特定的响应大小阈值略有不同).

为什么它会像这样?


编辑:在我的情况下,ESET NOD32防病毒检查HTTP协议是罪魁祸首.

Seb*_*563 2

防病毒软件正在扫描您的 PC 传入/传出的数据。

它们被编程为知道如何理解标准类型的数据,并且不会使扫描变得简单strings ints datatable。当您直接操作这些数据时,您是在告诉给定的防病毒软件“嗨,我很奇怪,请检查我”,防病毒“规则”是隐藏的,但我确信有一些“大小”,“格式”等.这取决于软件。就您而言,它速度较慢,它必须执行额外的扫描工作才能确保您的安全。对于运行发送一些自定义数据的自定义应用程序的 Intranet 解决方案来说,这是一个众所周知的问题。