none
程式的記憶體越來越大 RRS feed

  • 問題

  • 我使用Timer來一直不斷抓取網路上的資料(分析Webbrowser元件中的項目)

    Timer.Interval=5000(每個Timer_Tick裡面先Timer.Enable=False等裡面的動作都做完之後再Timer.Enable=True)

    但跑的越久工作管理員的記憶體就越來越大

    已經將變數改為全域變數

    且程式碼也只有跑for迴圈而已,沒有跑資料庫

    不知道有沒有什麼方法可以釋放記憶體??

    我用Windows 7,記憶體整個從100M跑兩個小時到700M,認可記憶體到1G,再跑下去電腦不知道能不能靠的住

    我知道GC.collect可以強制釋放記憶體,但.net framework應該是會自動做記憶體釋放的沒錯吧??

    若用C#的話記憶體會比較小??

    謝謝!!

    2010年8月20日 上午 04:59

解答

  • 不要用WebBrowser呢?改用WebClient去抓網頁資料
    • 已標示為解答 Lolota Lee 2010年8月27日 上午 09:30
    2010年8月20日 下午 12:18
  • 那就改用 WebClient 來處理吧。

    WebBrowser Control 跟 IE 共用核心元件,IE 用久也是越來越大。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2010年8月27日 上午 09:30
    2010年8月20日 下午 02:24

所有回覆

  • 因為不知道您的程式怎麼寫的, 您可以先在Timer_Tick程序中加入GC.collect, 然後看看是否有改善?
    2010年8月20日 上午 06:34
  • 每5分鐘一次GC.collect好像還是一樣

    記憶體的認可大小會越來越大

    大到連某些功能鍵按了都沒反應~慘

    2010年8月20日 下午 12:04
  • 不要用WebBrowser呢?改用WebClient去抓網頁資料
    • 已標示為解答 Lolota Lee 2010年8月27日 上午 09:30
    2010年8月20日 下午 12:18
  • Webbrowser提供比較多介面使用

    WebClient可能還需要處理Cookies等複雜的程序且只能下載原始碼後分析

    因此這可能是Webbrowser的問題??

    這樣的話動態產生WebBrowser一段時間Dispose再重新放置是否能改善呢??

    2010年8月20日 下午 12:23
  • 你自己下 Dispose 指令不就知道了嗎?

    如果你在過程中發現問題的話, 你可能要先檢查你是否把這個 WebBrowser 控制項加入到網頁中; 如果有, 可以試著先將它移除。


    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny

    ★請提問人注意: 我的回覆都只是基於我的雞婆與個人興趣; 為了不要因為我的雞婆與個人興趣引起別人的誤會, 敬請提問人*切勿*(就是「絕對不要」的意思)將我的任何回覆標示為解答。如果你一定要標, 麻煩往我樓上任選一個去標就行了。

    2010年8月20日 下午 01:14
  • 那就改用 WebClient 來處理吧。

    WebBrowser Control 跟 IE 共用核心元件,IE 用久也是越來越大。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2010年8月27日 上午 09:30
    2010年8月20日 下午 02:24
  •     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Click
            Using fileReader As New System.Net.WebClient
                fileReader.DownloadFileAsync(New Uri(http://www.google.com.tw), Environment.CurrentDirectory & "\ggg.html")
                AddHandler fileReader.DownloadFileCompleted, AddressOf subOnComplete
            End Using
        End Sub

        Sub subOnComplete()
            '分析HTML
        End Sub

    如果按照以上的寫法用Timer一直跑WebClient會不會一直佔用記憶體

    2010年8月20日 下午 02:34