我想在ASP.NET MVC(5)應用程序中獲得關於內存管理的更多信息。MVC應用程序內存管理
爲了簡單起見,讓我們說,我們有角控制器,它不僅使一個http.get()
電話對我api controller
檢索70 000件IEnumerable<CustomItem>
,之後將結果輸出到頁面(頁面實現一個簡單的頁面)。
查看我的診斷工具(內存分析器)時,可以看到內存從50 MB(起始點)上升到300 MB(一旦檢索到所有數據)。
這裏是我不明白的事情:
爲什麼當我打開不同的瀏覽器相同的頁面在同一時間(試圖模擬更多的用戶在同一時間訪問該頁面),該第二個用戶的內存消耗不會再增加250 MB,但即使數據已被再次加載,它仍保持不變?
我在印象中,ApiController
不是在用戶之間共享,而是爲每個用戶創建新實例。如果我是對的,情況確實如此,那麼如果再有70 000件物品到達內存消費沒有改變?
任何文章或解釋將不勝感激。
加成1:
我的API控制器被從SharePoint
rerieving數據,因此我必須所有70項000記錄在一次傳遞給我的角分量,從而事後實現分頁。換句話說,我的組件只加載一次所有數據(70 000條記錄),之後只顯示一部分(否則,如果我在瀏覽器用於凍結的70 000個項目上使用了data-ng-repeat
)。
如果必要的話我一定能顯示我ApiController
代碼,但實際上它的代碼只是3線,返回IEnumerable<CustomItem>
僅容納三個字符串屬性。這是它的樣子:
public class SharepointFile
{
public string FileType { get; set; }
public string FileName { get; set; }
public string FilePath { get; set; }
}
您使用的數據庫是?你的控制器源代碼是什麼樣的?記錄的平均大小是多少?很難說這裏發生了什麼。大部分的內存使用可能是應用程序本身,而不是數據,但我不確定。 –
需要更多信息,您是否將所有記錄加載到內存中?如果分頁是以正確的方式實現的(數據庫端),那麼你從來沒有真正擁有'IEnumerable'上的70K記錄,你只需要顯示(當前頁面),並且這不會代表高負載服務器。 –
JOBG
從你扔的數字看來,你正在將所有70k記錄加載到內存中。對於單個分頁查詢,內存不應該增加太多。 – user449689