为什么我的效率这么慢?
HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(textURL.Text);
wr.ContentType = "application/x-www-form-urlencoded ";
wr.Accept = "*/* ";
wr.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) ";
HttpWebResponse myHttpWebResponse = (HttpWebResponse)wr.GetResponse();
StreamReader oStream = new StreamReade(myHttpWebResponse.GetResponseStream(), System.Text.Encoding.Default);
string res = oStream.ReadToEnd();
MatchCollection Matches = Regex.Matches(res, "src=(\\S*)\\.jpe?g ", RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase);
if (!Matches.Count.Equals(0))
{
foreach (Match NextMatch in Matches)
{
//NextMatch.Value就是一个jpg图片的地址
System.Net.WebClient webClient = new System.Net.WebClient();
System.IO.Stream stream = webClient.OpenRead(NextMatch.ToString().Substring(5));
this.pictureBox.Image = Image.FromStream(stream);
stream.Dispose();
break;
}
}
功能很简单,就是单击button之后,在pictureBox显示这个网址的jpg图片,功能可以实现,可是单击后速度很慢,这是为什么??求点指教~谢谢~
------解决方案--------------------建议读到图片流之后直接显示出来,
可以考虑一下GDI中的方法,
或者干脆存成临时图片,然后显示
------解决方案--------------------用多线程来处理图像的显示。
------解决方案--------------------如果你的图片都是要通过网络获取的
那么我觉得主要时间可能都用在等待图片下载完成了。
这里用异步或者多线程并行下载的方法可能会好一些。(浏览器里面的图片都是多个同时下载的),
更进一步缩短加载时间的话,可以虑自己写一些东西支持progressive load了(就是你看到IE里面显示很大的图片的时候是一部分一部分显示的那种),不过这个比较麻烦,而且.Net里面的PictureBox也不支持。
------解决方案--------------------一个网页上的jpg?这个jpg是本地路径或者是在本机的Web服务器上吗?如果不是那么还是要通过网络下载吧?
首先确定是哪里慢吧。
你把那个For each循环注释掉看看有多快?你可以用Stopwatch类来测量你的代码所需要的时间。