我使用C#。
我第一次在代码中使用WebRequest GetRequestStream()时,最多需要20秒。之后需要不到1秒钟。
以下是我的代码。行“this.requestStream = httpRequest.GetRequestStream()”导致延迟。
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();
我怎样才能看到导致这种情况的原因? (例如:DNS查找?服务器没有响应?)
感谢和问候,Koen
答案 0 :(得分:11)
您也可以尝试设置.Proxy = null。有时它会尝试自动检测占用时间的代理。
答案 1 :(得分:1)
听起来你的应用程序是在你第一次点击它时进行预编译。这就是.net的工作原理。
这是一种加速您的网络应用的方法。 link text
答案 2 :(得分:1)
它实际上是HTML操作的框架,用于启动网络代理检查以设置属性HttpWebRequest.DefaultWebProxy
。
在我的应用程序中,作为启动操作的一部分,我创建了一个完整形成的请求作为后台任务,以避免这种开销。
HttpWebRequest web = (HttpWebRequest)WebRequest.Create(m_ServletURL);
web.UserAgent = "Mozilla/4.0 (Windows 7 6.1) Java/1.6.0_26";
在我的情况下设置UserAgent字段会触发启动开销。
答案 3 :(得分:0)
问题可能是.NET, by default, only allows 2 connections at a time。
您可以使用以下方法增加同时连接数:
ServicePointManager.DefaultConnectionLimit = newConnectionLimit;
我们将确定最佳值留给用户。
答案 4 :(得分:0)
我遇到了同样的问题,但是.proxy = null
并没有为我解决。根据网络结构,问题可能会连接到IPv6。每次运行应用程序时,第一个请求几乎花了21秒。因此,我认为这必须是超时值。如果达到此值,则将使用后备解决方案IPv4(也用于后续调用)。首先,强制使用IPv4为我解决了这个问题!
HttpWebRequest request = WebRequest.Create("http://myurl.com") as HttpWebRequest;
request.ServicePoint.BindIPEndPointDelegate = (servicePount, remoteEndPoint, retryCount) =>
{
if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
return new IPEndPoint(IPAddress.Any, 0);
}
throw new System.InvalidOperationException("No IPv4 address found.");
};