我有一個函數可以創建一個對象列表並返回它存儲在ViewBag中。ViewBag內存泄漏
的代碼如下:
List<XDocument> xDocs = readXmlFiles(path);// a "new List<XDocument>()" is called
ViewBag.data = xDocs;
return View();
我的問題是,如果我們有代碼,因爲這,將垃圾收集器釋放的xDocs分配的資源或沒有?或者至少會在處理相同視圖的新請求後釋放它?
我有一個函數可以創建一個對象列表並返回它存儲在ViewBag中。ViewBag內存泄漏
的代碼如下:
List<XDocument> xDocs = readXmlFiles(path);// a "new List<XDocument>()" is called
ViewBag.data = xDocs;
return View();
我的問題是,如果我們有代碼,因爲這,將垃圾收集器釋放的xDocs分配的資源或沒有?或者至少會在處理相同視圖的新請求後釋放它?
我的問題是,如果我們有這樣的代碼,垃圾 收集器會釋放爲xDocs分配的資源嗎?
是的,它會釋放它。一旦請求完成執行,ViewBag
將有資格進行垃圾回收。
或者至少會在處理相同視圖的新請求後被釋放?
發生垃圾回收的確切時間超出了您的控制範圍。 CLR將選擇最適合的時刻來執行它。這可能發生在下一個請求之前或之後。由於您爲每個請求創建了一個新集合,因此一旦不再有任何對它的引用(即請求完成執行後),此集合就有資格進行垃圾回收。
非常感謝你 –
那麼列表呢,那裏有項目,是否有必要清除列表? –
由於列表是持有對這些對象的引用的唯一對象,一旦ViewBag有資格進行垃圾回收,其所有屬性都將有資格進行包括此列表在內的垃圾回收,並且列表符合垃圾回收的條件,這些對象,他們也將有資格進行垃圾回收。 –
是的,它會釋放它,但它不會是當一個新的請求完成它可以在以後 – WhileTrueSleep
這不是一個研究問題,而是一個普遍的查詢。多讀一點MVC。 –
@WhileTrueSleep,非常感謝 –