单个字节添加到响应时,ASP.NET WebAPI输出速度减慢40倍怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

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

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中都观察到它(但是,具体的响应大小阈值略有不同)。

为什么它会像这样?

在我的情况下,ESET NOD32杀毒检查HTTP协议是罪魁祸首。

提问于
用户回答回答于

AntiVirus软件正在扫描来自PC的传入/传出数据。

它们被编程为了解如何理解标准类型的数据,并且不会使scanns变得简单strings ints datatable。当你直接操纵数据时,你告诉防病毒软件“嗨,我很奇怪,请检查我”,防病毒“规则”是隐藏的,但也可能有其他类似的“大小”等等,这取决于软件。在你的情况下,它比较慢,它必须做额外的扫描工作,以确保你是安全的。与Intranet解决方案相比,这是一个非常有名的问题,它运行着发送一些自定义数据的自定义应用程序。

用户回答回答于

可能正在通过MTU传递网络,并且数据包在通过网络传递时会越来越分散。典型网络上的数据包最大不超过1500,之后他们会分裂。

尝试运行Wireshark并查看是否可以帮助您找出问题。也可以尝试在网络适配器上启用Jumbo Frames,看看是否有帮助。

扫码关注云+社区