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

标签 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);
    }
}

响应时间(由 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 协议(protocol)是罪魁祸首。

最佳答案

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

他们被编程知道如何理解标准类型的数据,而不是简单地扫描 strings ints datatable .当您直接操作此数据时,您是在告诉给定的防病毒软件“嗨,我很奇怪,请检查我”,防病毒“规则”是隐藏的,但我确定有一些“大小”、“格式”等. 这取决于软件。在你的情况下它比较慢,它必须做额外的扫描工作来确保你是安全的。对于运行正在发送一些自定义数据的自定义应用程序的 Intranet 解决方案,这是一个非常知名的问题。

关于将单字节添加到响应时,ASP.NET WebAPI 输出会慢 40 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35413752/

相关文章:

asp.net-web-api - Application_End()WebApi

c# - Restful 网址。查看特定型号

javascript - 在 ASP.NET 中为 HTML 类添加脚本

asp.net - 浏览器的缓存是否考虑了 URL 中的参数? (ASPX 页面)

asp.net - Web API 外部承载未经授权

tomcat - 在 WebTrends 的一个配置文件中指定多个数据日志文件(IIS 和 Tomcat)

iis - 为什么相同的文件会被复制到 Windows Azure WebRole 中的/Approot 和/Siteroot 中?

jquery - 如何在 asp.net 转发器中选择一个 div

c# - 转发器 ItemTemplate 服务器端

c# - 如何使用带SQL的PagedDataSource进行分页?