為何 ASP.NET 系統處理程序佔去太多記憶體?應該如何處理?

通常並不是很多人注意到這個問題。但是如果您發現網站為什麼速度愈來愈慢,您會不會懷疑是因為 ASP.NET 程式佔去太多記憶體,而導致系統變慢、甚至當掉的關係?

如何確定是記憶體的問題呢?您可以開啟工作管理員,在「處理程序」頁籤下,找一下 w3wp.exe (如果您使用 IIS 6.0) 或 aspnet_wp.exe (如果您使用 IIS 5.0),觀察它的記憶體使用量。如果您發現它已經佔去幾百 MB,而且還在不停的往上增加的話,那麼大致上就是記憶體的問題。

若按照正常的狀況,這個處理程序所佔用的記憶體是忽大忽小的,但總是侷限在一個合理的範圍之中。至於到底多大或多小才算合理,得視您的網站的結構和使用者的上線狀況而定。但它佔用記憶體的大小不應該無止盡的增加,否則就是異常。

有什麼方式會造成不正常的記憶體使用情況呢?首先,請注意您是不是在產生專案時使用 Debug 模式而非 Release 模式。使用 Debug 模式會造成系統的負擔,所以請在最後一次做 build 時切換到 Release 模式。同時,請把 Web.config 中的 debug="true" 和 trace enabled="true" 改掉。

其次,您是否在程式中加上了太多的字串相加(例如 "abc" & "cde" & "def"...)動作?這麼做的結果,事實上是使得記憶體中佔用了太多根本不必要的空間,也同時浪費了運算的資源。ASP.NET 提供了 StringBuilder 這個類別,請好好的運用它。

如果您尚未安裝 .Net Framework 1.1 SP1 的話,請儘快安裝。因為 SP1 所採用的記憶體區塊大小為 16M,比之前的 64M 來得有效率,造成記憶體問題的機率也變低了。


其次,檢視您的程式是否使用了許多佔用記憶體的物件,包括龐大的 DataSet 物件、Session 物件、Cache 等等。如果有的話,應該考慮採用其它的寫法。



--------------------------------------------------------------------------------

留言

這個網誌中的熱門文章

嘗試卸載資料庫時,發生資料庫正在使用的而無法卸載的可能解決方案

ASP.NET常用的RegularExpressionValidator驗證