我已经制作了一款可以访问和控制Onvif相机的应用程序。然而,这是我第一次制作任何使用此类(或根本没有)网络请求的应用程序,因此我假设我可能使用了非常基本的技术。 我很好奇的代码部分就是:
Uri uri = new Uri(
String.Format("http://" + ipAddr + "/onvif/" + "{0}", Service));
WebRequest request = WebRequest.Create((uri));
request.Method = "POST";
byte[] b = Encoding.ASCII.GetBytes(PostData);
request.ContentLength = b.Length;
//request.Timeout = 1000;
Stream stream = request.GetRequestStream();
//Send Message
XmlDocument recData = new XmlDocument();
try
{
using (stream = request.GetRequestStream())
{
stream.Write(b, 0, b.Length);
}
//Store response
var response = (HttpWebResponse) request.GetResponse();
if (response.GetResponseStream() != null)
{
string responsestring = new
StreamReader(response.GetResponseStream())
.ReadToEnd();
recData.LoadXml(responsestring);
}
}
catch (SystemException e)
{
MessageBox.Show(e.Message);
}
return recData;
}
代码工作正常,但是使用令牌语句,我发现第一个请求需要大约400毫秒才能完成,而后续的请求只需要10到20毫秒。我有什么办法可以加快第一次请求吗?
答案 0 :(得分:5)
你做得很好。完成时间差异的原因可能是HTTP Keep-Alive。默认情况下,相同的连接将重复用于后续请求。所以第一个请求必须建立连接,这可能是为什么需要更长时间。其余请求使用相同的已打开连接。
答案 1 :(得分:0)
除了潜在的网络和服务器问题,请求本身也很重要。您可以选择减小请求的大小或将其分解并异步加载文件。
开箱即用的Web服务器不需要400毫秒来完成一个简单的请求。