我有一个简单的操作方法,如下所示:
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服务器和IIS8.5中都观察到了它(但是,具体的响应大小阈值略有不同)。
它到底为什么会这样呢?
编辑:在我的案例中,ESET NOD32 antivirus检查协议是罪魁祸首。
发布于 2016-02-25 19:58:55
AntiVirus软件正在扫描从您的电脑传入/传出的数据。
他们被编程为知道如何理解标准类型的数据,而不是在简单的strings ints datatable
上进行扫描。当你直接操作这些数据时,你是在告诉给定的杀毒软件“嗨,我很奇怪,请检查我”,杀毒“规则”是隐藏的,但我知道肯定有一些“大小”,“格式”等,这取决于软件。在您的情况下,它的速度较慢,它必须执行额外的扫描作业,以确保您的安全。在运行定制应用程序的Intranet解决方案中,这是一个非常众所周知的问题,这些应用程序正在发送一些定制数据。
发布于 2016-02-25 14:42:16
很可能您正在传递网络的MTU,数据包在通过网络时变得支离破碎。典型网络上的数据包最大值不超过1500个,超过此值后,它们将被拆分。
尝试运行Wireshark,看看这是否可以帮助您追踪问题。您还可以尝试在您的网络适配器上启用巨型帧,看看这是否有帮助。
https://stackoverflow.com/questions/35413752
复制相似问题