asp.net - studio - swagger-net
La salida WebAPI de ASP.NET se vuelve 40 veces más lenta cuando se agrega un solo byte a la respuesta (2)
Es probable que esté pasando por alto el MTU para la red y los paquetes se están fragmentando al pasar por la red. Los paquetes en una red típica alcanzan un máximo de 1500 después de lo cual se dividen.
Intenta ejecutar Wireshark y ve si eso puede ayudarte a rastrear el problema. También puede intentar habilitar Jumbo Frames en su adaptador de red y ver si eso ayuda.
Tengo un método de acción simple como este:
public class TestApiController : ApiController
{
[Route("api/string"), HttpGet]
public string GetString(int length)
{
return new string(''x'', length);
}
}
Tiempos de respuesta (según lo observado por Fiddler):
GET /api/string?length=1186
0.008
0.007
0.007
...
GET /api/string?length=1187
0.208
0.212
0.205
...
Es decir, al agregar un solo byte a la respuesta, el tiempo de procesamiento aumentó 40 ×.
Este comportamiento es absolutamente coherente y lo observo tanto en el servidor web de Visual Studio como en IIS 8.5 (sin embargo, el umbral de tamaño de respuesta específico es ligeramente diferente).
¿Por qué demonios se comportaría así?
EDITAR : En mi caso, el antivirus ESET NOD32 que inspeccionaba el protocolo HTTP era el culpable.
El software AntiVirus está escaneando datos entrantes / salientes de su PC.
Están programados para saber cómo comprender los datos de los tipos estándar, y no realizan escaneos en strings ints datatable
simples en tablas de strings ints datatable
. Cuando está manipulando datos directamente, le está diciendo al software antivirus: "Hola, soy extraño, por favor revisenme", las "reglas" de antivirus están ocultas, pero también puede haber otro tipo de "tamaño", etc. depende del software. En su caso, fue más lento. Tenía que hacer trabajos de escaneo adicionales para estar seguro de que estaba a salvo. Este es un problema muy conocido sobre las soluciones de Intranet que ejecutan aplicaciones personalizadas que envían datos personalizados.