2013-05-27 42 views
1

我有一個函數可以創建一個對象列表並返回它存儲在ViewBag中。ViewBag內存泄漏

的代碼如下:

List<XDocument> xDocs = readXmlFiles(path);// a "new List<XDocument>()" is called 
ViewBag.data = xDocs; 
return View(); 

我的問題是,如果我們有代碼,因爲這,將垃圾收集器釋放的xDocs分配的資源或沒有?或者至少會在處理相同視圖的新請求後釋放它?

+1

是的,它會釋放它,但它不會是當一個新的請求完成它可以在以後 – WhileTrueSleep

+0

這不是一個研究問題,而是一個普遍的查詢。多讀一點MVC。 –

+0

@WhileTrueSleep,非常感謝 –

回答

3

我的問題是,如果我們有這樣的代碼,垃圾 收集器會釋放爲xDocs分配的資源嗎?

是的,它會釋放它。一旦請求完成執行,ViewBag將有資格進行垃圾回收。

或者至少會在處理相同視圖的新請求後被釋放?

發生垃圾回收的確切時間超出了您的控制範圍。 CLR將選擇最適合的時刻來執行它。這可能發生在下一個請求之前或之後。由於您爲每個請求創建了一個新集合,因此一旦不再有任何對它的引用(即請求完成執行後),此集合就有資格進行垃圾回收。

+0

非常感謝你 –

+0

那麼列表呢,那裏有項目,是否有必要清除列表? –

+2

由於列表是持有對這些對象的引用的唯一對象,一旦ViewBag有資格進行垃圾回收,其所有屬性都將有資格進行包括此列表在內的垃圾回收,並且列表符合垃圾回收的條件,這些對象,他們也將有資格進行垃圾回收。 –