[英]Memory leak in .Net
我想知道 memory 是否真的被泄露了。 我的場景是這樣的:
這是 memory 泄漏還是可能是垃圾收集器沒有清除 memory 的情況。
並且作為事件也被視為參考。 如果事件出現在取消引用的 object 中怎么辦? 那么該事件不會被視為參考,對嗎?
垃圾收集器只釋放不再引用的對象。
它不會神奇地刪除您不再需要的所有對象。
檢查您是否仍有對任何對象的引用。 請記住,事件也被視為引用。 (需要知道 object 到 go 到哪個)
Memory 僅在需要時進行垃圾收集,當所謂的第 0 代已滿或整個系統 memory 壓力足以強制進行垃圾收集時更具技術性。 Memory 出 scope 時不會自動回收。 更多信息在這里和這里。
只是為了測試,在關閉對話框后(不再引用它之后)嘗試調用GC.Collect()
) 以強制 GC 收集任何可用的 memory。
實際上,您不應該擺弄垃圾收集器,它經過大量調整以獲得最佳性能。
如果您懷疑您確實泄漏了 memory,請使用某種 memory 分析器來分析您的應用程序。
嘗試例如RedGates Memory Profiler ,他們有一個基於時間的試驗。
按照此演練快速了解要查找的內容和方法。
In.Net 一旦你不引用 object,object 就會被收集回來。 如果您有實時參考,則 object 將保持活動狀態。 因此,要找到 memory 泄漏,您需要執行以下操作
您可以使用一些 memory 分析器來執行此操作,也可以使用 WinDbg+sos。 人們覺得 windbg 很難使用,但對於這些情況,windbg+sos 更容易使用並且是免費的。 修復泄漏后,您也會感到高興。 您將成為那些總是喜歡免費強大工具的人之一。
看看這個鏈接。
http://blogs.msdn.com/b/ricom/archive/2004/12/10/279612.aspx
如何使用 memory 分析工具(例如JetBrains dotTrace )來分析您的應用程序的 memory 使用情況?
可能是垃圾收集器沒有清除 memory
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.