ASP.NET記憶體瘋狂佔用,我差點崩潰了,幸好還是解決了。

來源:互聯網
上載者:User
  原來寫過的一部分ASP.NET的頁面用於資料的選擇,也就是把合格記錄都顯示出來,由使用者選擇其中的一條。為了加快速度,所有合格資料取出後放在了Session中,分頁尋找時直接取這個資料就可以了。一直啟動並執行很正常(呵呵,可能是也不正常,只不過沒有看出來),後來換了一個資料量比較大的系統,選擇幾次資料後記憶體佔用竟然到了1個多G,最終造成記憶體超過極限進程崩掉了。
  百思不得其解,資料是儲存在Session中的,退出的時候也根據相關的Key值清除了,應該會釋放掉了。但是即使我加了強制回收垃圾代碼也不管用。
  沒辦法,讀代碼吧,反正知道是在哪部分出的問題。發現產生了一個新的Table用於分頁,然後這個Table綁定了自訂的DataGrid並且也放到了Session中,這部分是DataGrid管理的,退出時沒有清除。但是這個Table中僅有10行資料(預設的),並且同一個使用者開啟同一個選擇會衝掉以前的緩衝,所以不應該出現這麼大的記憶體佔用啊。
  只好在緩衝的資料做文章了。緩衝的是一個DataView(實際是一個DataTable的DefaultView),來點狠的, 退出頁面時調用CacheData.Table.Clear()清除掉DataTable中的資料然後CacheData.Dispose(),再用原來的處理清除其他Session中緩衝的資料(幾個標誌,成不了什麼氣候),順手在DataGrid中增加方法清除掉緩衝,然後強制回收垃圾,運行、測試,查看記憶體,哈哈,一直穩定在40~50M之間啊。
  俺的機器不行,太大的資料查詢造成連線逾時,換到了伺服器上的正式系統中,開啟多個IE訪問、測試,基本穩定在了300M左右。成功!
  有必要的話,太大的對象不使用了最好還是顯示清除一下好。因為這部分代碼寫的比較早,想到.NET應該可以自動回收,所以當時根本沒有在意這個問題。 想想寫這些代碼的時候還是比較弱啊
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.