none
HttpWebResponse.GetResponseStream().Write 會使用大量記憶體? RRS feed

  • 問題

  • 我嘗試使用 HttpWebRequest 模擬 Form Submit File 到 Server,我測試 Submit 6xxMB 到 Server 時發現,如下的片段會瞬間使用大量的記憶體 (2xx 以上),上傳過程因為造成大量的分頁檔拖垮系統速度而被我終止執行,所以實際上會比 2xx 更高

                       while ((bytesRead = fileStream.Read(buffer, 0, blockSize)) != 0) {
                            requestStream.Write(buffer, 0, bytesRead); // 有問題的程式
                            requestStream.Flush();                                           
                        }

    感覺上 Stream 將資料 Cache 在內部,導致使用大量的記憶體。可是透過 Flush 似乎也沒有將資料寫出釋放記憶體,請問有人遇到類似的問題嗎?

    -------
    Chui-Wen Chiu's Note
    http://chuiwenchiu.spaces.live.com
    2007年10月9日 上午 03:05

所有回覆

  • HI,

     

    傳送大量資料可以考慮使用FtpWebRequest類別, 不要使用HttpWebRequest類別

     

    tihs

    2007年10月9日 上午 03:36
  • 很好的建議,可是目前 Server 並沒有提供 FTP 服務 @_@
    不過,為什麼 HttpWebResponse 的 Stream 會耗掉大量的記憶體呢?

    2007年10月10日 上午 06:22
  • HI,

     

    您可以加上一行呼叫看看:

     

    requestStream.Close();

     

    或是參考以下的範例的做法:

     

    http://www.developer.com/net/net/article.php/3340151

     

    tihs

    2007年10月10日 下午 12:59
  • 謝謝 tihs 的回覆

    不過...加上下面這行
    requestStream.Close();
    並不是我的需要,因為問題在傳輸過程中消耗大量記憶體,讓系統產生大量的分頁檔,導致系統效能嚴重下降,我要如何降低 Write 過程中的記憶體損耗呢?

    另外,我可能忘了說,我是用來上傳,而且我有使用 using 語法自動關閉 Stream ~

    Chui-Wen Chiu
    2007年10月10日 下午 01:39
  • HI,

     

    那可能需要在接收一定體積的檔案大小後自行寫到暫存檔案中, 看是否可以解決記憶體的困境

     

    tihs

    2007年10月11日 上午 10:51
  •  看到大量資料上傳,小弟想到,不知大大你是否有使用
     
      WebClient這元件
     
      小弟之前曾用這元件寫過上傳資料
     
      
       雖然跟你要討論的主題有偏了
    2007年10月12日 上午 08:54
  • 有用過,但不好用...
    2007年10月13日 上午 05:43