2010-07-29 43 views
2

是否可以恢復從w3wp.exe丟失的內存?我認爲session.abandon()應該清理那樣的資源?事情是我有一個Web應用程序,某些頁面使w3wp.exe顯着增長。從40 MB到400 MB。現在,我將嚴格優化我的代碼以減少這種情況,但是,對於w3wp.exe的增長量,即使用戶註銷並關閉了瀏覽器,是否仍無法恢復丟失的內存?從w3wp.exe恢復內存

我知道這個工作進程會在空閒使用30分鐘(默認)後回收,但是如果長時間沒有空閒使用時間並且工作進程仍然有這部分內存,它會一直保持生長?任何想法的人?

+0

當您在關閉舊會話後開始新會話時,您是否看到服務的內存佔用增長? – Achilles 2010-07-29 13:38:12

+0

是的。即使在用戶註銷(session.abandon())後,我的w3wp.exe也會在特定頁面上達到400MB,但下一個用戶進入後,訪問該頁面並將w3wp.exe轉換爲700Mb。 – xeshu 2010-07-29 14:09:38

+0

看來你在會話中投入了大量的數據。相反,使用文件或數據庫來存儲大量數據。 – 2010-07-29 14:12:08

回答

0

垃圾收集器將處理任何需要釋放的內存,只要您正確地處理事情等。GC每次呼叫Session.Abandon()時都不會立即啓動,因爲這將是一個主要表現來襲。也就是說,每個應用程序都有一個「正常的」內存使用情況,即穩定的內存使用情況(同樣,假設您沒有泄漏),並且這個數字對於每個應用程序都是不同的。 400MB可能很多,或者它可能什麼都不是,取決於你的應用的功能。我的應用程序徘徊在400MB左右,其他人則在1.5GB左右,只要內存使用量穩定在某個位置,就可以了。如果你看到無限的內存使用情況,那麼你很可能在你的應用程序的某處發生了泄漏。

將大量數據存儲在進程內會話中也可以快速消耗內存使用量。而是使用文件或數據庫來存儲這些數據。

+0

基本上,我根本沒有處理任何物體。我認爲c#的'使用'部分應該照顧處理業務?是的,我的生產部署不會執行session.abandon()。我剛剛意識到這一點,並將把它放在代碼上,但這可能沒有多大用處,因爲99.9%的用戶並不真正打開註銷按鈕,他們只是簡單地關閉瀏覽器。 – xeshu 2010-07-29 14:12:02

0

除非您泄漏內存,否則內存管理器將重新使用此內存,因此您不應該看到進程內存不斷增長。

+0

嗯重新使用,現在這是一個有趣的概念... – xeshu 2010-07-29 14:10:38