2012-05-03 20 views
16

Escribí un programa multiproceso en C# que rastrea un sitio web, pero cuando comencé Fiddler en segundo plano completé 12 veces más rápido, es realmente extraño para mí y cuando cierro las velocidades de descarga de Fiddler ralentiza los descensos. cómo es posible, por favor ayuda, (no hay una configuración de proxy para mi conexión a ineternet y para Fiddler también) Si puedo inyectar el rendimiento de fiddler en mi aplicación, sería maravilloso, ¿alguna solución? ¿Hay magia detrás de las escenas? :)Por qué la solicitud de Http con Fiddler es increíble

Gracias

Respuesta

11

¿Puedes mostrar un código de muestra para que la gente pueda confirmarlo? De lo contrario, se convertirá en una adivinanza salvaje.

Mi mejor estimación: Fiddler uses keepalive que ahorrará la molestia de abrir la conexión una y otra vez. Puede confirmar esto deshabilitando Reuse client connections y Reuse connections to servers: si es tan lento como de costumbre (o más lento), se obtiene el beneficio de mantener la conexión activa.

+0

En mi programa, cuando creo una conexión y descargo el contenido, cierro la respuesta y cancelo la solicitud en final, pero me pregunto si este es el mismo código que se está ejecutando con el fiddler en segundo plano y su rápido. ¿El Fiddler cambia mi solicitud y usa la misma conexión para cada solicitud? – Ehsan

+0

@Eshan _ "¿Fiddler cambia mi solicitud y usa la misma conexión para cada solicitud?" _ Sí. – CodeCaster

+1

entonces, ¿cómo puedo usar esta característica en mi programa con HttpWebRequest? – Ehsan

22

La razón es el límite para la cantidad de conexiones http que se ignora cuando se utiliza Fiddler.

Tuve el mismo problema al utilizar System.Net.Http.HttpClient para realizar varias solicitudes concurrentes (~ 80). Con Fiddler ejecutándose, todas las solicitudes se completaban mucho más rápido. Keep-alive ciertamente fue habilitado.

Utilicé Wireshark para ver qué sucedía y lo primero que noté fue que la forma del tráfico http era diferente. Con Fiddler las solicitudes se lanzaron todas a la vez y después de eso las respuestas también se agruparon muy bien. Sin Fiddler, las solicitudes se entrelazaban con respuestas.

En segundo lugar, tcpview mostró que mi código sin Fiddler creaba solo 2 conexiones tcp al servidor. Con Fiddler iniciado, la cantidad de conexiones aumentó drásticamente. Hubo decenas de ellos desde mi aplicación hasta Fiddler y luego desde Fiddler hasta el servidor.

Es bien sabido que el estándar http recomienda que el número de conexiones http no sea más de 2 y parece que el límite se implementa como una configuración predeterminada en los clientes http.

En aplicaciones .NET podemos controlar el límite con ServicePointManager.DefaultConnectionLimit propiedad estática. Como experimento, al establecerlo en 100, las solicitudes ejecutaban la misma velocidad con o sin Fiddler.

El ajuste también se puede controlar mediante app.config:

<system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="100" /> 
    </connectionManagement> 
</system.net> 

Ahora, ¿por qué el límite de conexiones por defecto no se respeta al utilizar Fiddler? Resulta que el límite es diferente cuando un cliente http usa un proxy y Fiddler sí actúa como un proxy. No encontré mucha información sobre el límite de conexión proxy además de this old article.

Cuestiones relacionadas