<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-348  評論-598  文章-0  trackbacks-0
    HttpWebRequest myRequest = null;
                HttpWebResponse myResponse 
    = null;
                Stream reqStream 
    = null
                Stream resStream 
    = null;

                
    try
                
    {
                    
    byte[] data = System.Text.Encoding.Default.GetBytes(param);

                    myRequest = (HttpWebRequest)WebRequest.Create(url);
                    myRequest.Method 
    = "POST";
                    myRequest.KeepAlive 
    = true;
                    myRequest.ContentType 
    = "application/octet-stream";
                    myRequest.ContentLength 
    = data.Length;
                    reqStream 
    = myRequest.GetRequestStream();
                    reqStream.Write(data, 
    0, data.Length);
                    reqStream.Close();

                    myResponse 
    = (HttpWebResponse)myRequest.GetResponse();
                    resStream 
    = myResponse.GetResponseStream();
                    data 
    = new byte[512];
                    
    int count = 0;
                    UIFactory.zZRK_MODIForm.memStream 
    = new MemoryStream();
                    
    while ((count = resStream.Read(data, 0, data.Length)) > 0)
                    
    {
                        UIFactory.zZRK_MODIForm.memStream.Write(data, 
    0, count);
                    }

                    resStream.Close();
                    
                }

                
    catch
                
    {
                }

                
    finally
                
    {
                    
    if (resStream != null)
                    
    {
                        resStream.Close();
                    }

                    
    if (reqStream != null)
                    
    {
                        reqStream.Close();
                    }

                    
    if (myResponse != null)
                    
    {
                        myResponse.Close();
                    }

                }
    大家看下這段程序,有問題嗎?乍一看,好像沒有什么問題,所有的流都釋放了,Response也釋放了。。不過如果你寫個循環無限次發起請求,你會發現,運行不了幾次就阻塞了。為什么呢?大家看下面的代碼
    HttpWebRequest myRequest = null;
                HttpWebResponse myResponse 
    = null;
                Stream reqStream 
    = null
                Stream resStream 
    = null;

                
    try
                
    {
                    
    byte[] data = System.Text.Encoding.Default.GetBytes(param);

                    
    //想服務器端發送請求,獲取照片信息
                    myRequest = (HttpWebRequest)WebRequest.Create(url);
                    myRequest.Method 
    = "POST";
                    myRequest.KeepAlive 
    = true;
                    myRequest.ContentType 
    = "application/octet-stream";
                    myRequest.ContentLength 
    = data.Length;
                    reqStream 
    = myRequest.GetRequestStream();
                    reqStream.Write(data, 
    0, data.Length);
                    reqStream.Close();

                    myResponse 
    = (HttpWebResponse)myRequest.GetResponse();
                    resStream 
    = myResponse.GetResponseStream();
                    data 
    = new byte[512];
                    
    int count = 0;
                    UIFactory.zZRK_MODIForm.memStream 
    = new MemoryStream();
                    
    while ((count = resStream.Read(data, 0, data.Length)) > 0)
                    
    {
                        UIFactory.zZRK_MODIForm.memStream.Write(data, 
    0, count);
                    }

                    resStream.Close();
                    
                }

                
    catch
                
    {
                }

                
    finally
                
    {
                    
    if (resStream != null)
                    
    {
                        resStream.Close();
                    }

                    
    if (reqStream != null)
                    
    {
                        reqStream.Close();
                    }

                    
    if (myResponse != null)
                    
    {
                        myResponse.Close();
                    }

                    
    if (myRequest != null)
                    
    {
                        myRequest.Abort();
                    }

                }
    多了些什么?多了這個
                    if (myRequest != null)
                    
    {
                        myRequest.Abort();
                    }
    其實很多時候釋放了Stream和Response還不夠,客戶端的Request還是在保持著,需要等垃圾回收器來回收,所以一般很容易阻塞,導致請求發送不出去。加上這個就是讓HttpWebRequest實例在不需要的時候及時釋放資源。這樣可以重復使用而不會阻塞。

    ---------------------------------------------------------
    專注移動開發

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2008-09-08 12:52 TiGERTiAN 閱讀(7853) 評論(3)  編輯  收藏 所屬分類: DotNetWindows Mobile

    評論:
    # re: HttpWebRequest使用注意(發生阻塞的解決辦法)[未登錄] 2008-11-08 09:21 | aa
    good  回復  更多評論
      
    # re: HttpWebRequest使用注意(發生阻塞的解決辦法) 2010-02-21 11:03 | OverGame
    看了此文才發現錯誤的所在,謝謝分享  回復  更多評論
      
    # re: HttpWebRequest使用注意(發生阻塞的解決辦法)[未登錄] 2010-06-11 20:42 | Tony
    這個問題在PC上還不明顯,PC默認能建立25個連接。
    但是在Windows Mobile上就很明顯了,我在Windows Mobile上做應用,2個request發出后,再發第三個馬上就阻塞抽住了,Debugger也無法catch,因為Debugger也要占用連接。
    感謝樓主分享。
      回復  更多評論
      
    主站蜘蛛池模板: 亚洲熟妇中文字幕五十中出| 亚洲阿v天堂在线2017免费| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲AV成人精品日韩一区18p| 天天影院成人免费观看| 国产精品美女久久久免费| 亚洲色www永久网站| 亚洲成人在线电影| 亚洲国产无套无码av电影| 亚洲国产成人久久综合野外| 日韩在线免费播放| 午夜两性色视频免费网站| 免费看美女裸露无档网站| 日本免费一区二区三区| 黄页免费在线观看| 中文字幕无码一区二区免费| 中文字幕永久免费| 日本免费高清视频| 5g影院5g天天爽永久免费影院| 秋霞人成在线观看免费视频 | 亚洲成A人片在线观看无码不卡| jjzz亚洲亚洲女人| 亚洲成A人片在线观看中文| 日韩激情无码免费毛片| 又色又污又黄无遮挡的免费视| 免费高清av一区二区三区| 日本成人在线免费观看| 亚洲成AV人在线观看网址| 亚洲精品国产精品乱码不卡| 亚洲AV无码一区二区三区在线观看 | 女人与禽交视频免费看| 日韩一区二区免费视频| 亚洲av麻豆aⅴ无码电影 | 9久热这里只有精品免费| 免费国产成人α片| 女人18毛片a级毛片免费视频| 精品亚洲AV无码一区二区三区 | 日韩在线免费看网站| 无码专区永久免费AV网站 | 亚洲综合久久成人69| 亚洲人成色99999在线观看|