<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也要占用連接。
    感謝樓主分享。
      回復  更多評論
      
    主站蜘蛛池模板: 日韩大片免费观看视频播放| 亚洲欧洲无码AV不卡在线| 黄色毛片免费观看| 国产片免费福利片永久| 国产精品亚洲一区二区三区在线观看| 成年女性特黄午夜视频免费看| 亚洲sss综合天堂久久久| 久久久久久久久免费看无码| 亚洲最大的成人网| 永久黄网站色视频免费直播| 免费一级毛片在线播放视频免费观看永久| 国产免费午夜a无码v视频| 免费看美女午夜大片| 亚洲精品乱码久久久久久久久久久久 | 亚洲AV日韩AV永久无码色欲| 免费一级黄色毛片| 香蕉免费一级视频在线观看| 亚洲最大免费视频网| 国产精品久久免费| 亚洲一区二区观看播放| 国产jizzjizz视频全部免费| yellow免费网站| 亚洲天天做日日做天天欢毛片| 国产片AV片永久免费观看| 亚洲AV无码一区二区三区电影 | 亚洲一区综合在线播放| 蜜桃视频在线观看免费网址入口| 亚洲AV无码成人精品区日韩| 亚洲熟伦熟女新五十路熟妇| 97av免费视频| 国产精品亚洲片在线花蝴蝶| 亚洲熟妇无码另类久久久| 国产a视频精品免费观看| 国产亚洲福利精品一区二区| 亚洲AV本道一区二区三区四区 | 99久久国产热无码精品免费| 国产亚洲视频在线观看网址| 婷婷精品国产亚洲AV麻豆不片| 女人被男人躁的女爽免费视频| GOGOGO高清免费看韩国| 亚洲一卡2卡4卡5卡6卡在线99|