日期:2014-05-19  浏览次数:20779 次

为什么我的效率这么慢?
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类来测量你的代码所需要的时间。