2010-07-28 17 views
7

Uso C#.C# primera vez que uso GetRequestStream() toma 20 segundos

La primera vez que uso WebRequest GetRequestStream() en mi código, demora hasta 20 segundos. Después de eso, toma menos de 1 segundo.

A continuación se muestra mi código. La fila "this.requestStream = httpRequest.GetRequestStream()" está causando el retraso.

StringBuilder postData = new StringBuilder(100); 
postData.Append("param="); 
postData.Append("test"); 
byte[] dataArray = Encoding.UTF8.GetBytes(postData.ToString()); 

this.httpRequest = (HttpWebRequest)WebRequest.Create("http://myurl.com"); 

httpRequest.Method = "POST"; 
httpRequest.ContentType = "application/x-www-form-urlencoded"; 

httpRequest.ContentLength = dataArray.Length; 

this.requestStream = httpRequest.GetRequestStream(); 

using (requestStream) 
    requestStream.Write(dataArray, 0, dataArray.Length); 

this.webResponse = (HttpWebResponse)httpRequest.GetResponse(); 

Stream responseStream = webResponse.GetResponseStream(); 
StreamReader responseReader = new System.IO.StreamReader(responseStream, Encoding.UTF8); 
String responseString = responseReader.ReadToEnd(); 

¿Cómo puedo ver las causas? (Por ejemplo: búsqueda de DNS El servidor no responde?)

Gracias y saludos, Koen

+0

En realidad, es un problema relacionado con la red VMWare NAT. Aún así creo que es extraño. – koen

+0

No veo el gran retraso la primera vez, pero parece crecer con cada solicitud. GetRequestStream tarda aproximadamente el doble que GetResponse. –

+0

(Establecer Proxy a null no parece ayudar mucho.) –

Respuesta

11

También podría intentar establecer .Proxy = null. Algunas veces intenta autodetectar un proxy que toma tiempo.

+1

Esto fue todo. ¡Muchas gracias! La detección de proxy tomó 20 segundos. – koen

1

Eso suena como su aplicación es pre-compilar la primera vez que lo golpea. Así es como funciona .net.

Aquí hay una manera de acelerar su aplicación web. link text

+0

Es en realidad un servicio de Windows. Sucede cada vez que comienzo el servicio, no solo después de que ha sido compilado. – koen

1

En realidad, es el marco para las operaciones HTML que realizan la comprobación de proxy de red de inicio para configurar la propiedad HttpWebRequest.DefaultWebProxy.

En mi aplicación, como parte de las acciones de inicio, creo una solicitud completamente formada como una tarea de fondo para apartar esta sobrecarga.

HttpWebRequest web = (HttpWebRequest)WebRequest.Create(m_ServletURL); 
web.UserAgent = "Mozilla/4.0 (Windows 7 6.1) Java/1.6.0_26"; 

Al configurar el campo UserAgent en mi caso se desencadena la sobrecarga de inicio.

0

Un problema puede ser el hecho de que .NET, by default, only allows 2 connections at a time.

Puede aumentar el número de conexiones simultáneas con:

ServicePointManager.DefaultConnectionLimit = newConnectionLimit; 

dejamos la determinación del valor óptimo al usuario.

Cuestiones relacionadas