-1
我有一個C#應用程序在過去幾周運行。當我第一次啓動它時,它有大約10000K的內存使用量。從那以後,我已經檢查過了,它的內存空間大約爲20000K。垃圾收集現在應該運行嗎?
我不知道的.Net垃圾收集得非常好,但是這是一個標誌,我肯定有內存泄漏? GC現在不應該運行嗎?
我讀過進入垃圾收集在這裏:
https://msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx
而且他們有GC的時候應該運行以下條件:
該系統具有低的物理內存。 (I有超過的存儲器70000K左使用,因此這不應該被觸發)
所使用的分配對象在託管堆上 存儲器超過可接受的閾值。隨着流程運行,此閾值連續調整 。 (你如何定義「可接受」的門檻?)
不應該我希望GC在幾個星期的時間跨度已經運行?
最常見的原因是人們認爲.NET未在收集垃圾是他們誤會了什麼任務管理器顯示他們和.NET如何管理堆。僅僅因爲_your_程序的直接內存消耗量減少了,這並不意味着.NET已將內存提供給Windows。或者,也許你確實有內存泄漏。誰知道?你沒有提供好的[mcve]。 –
要驗證是否存在內存泄漏,請不要使用任務管理器。而是使用適當的內存分析器。有一個來自Visual Stuidio。 – jetstream96
從沒有運行垃圾收集器的10MB到20MB只能在服務器級機器上運行。對於一個典型的C#程序來說,這是一個非常低的內存量,使用機器上可用的內存有效地是使代碼運行速度更快的最佳方式,CLR最好利用它。看起來你的程序並沒有給它很多機會。只有當它能夠持續攀升至1.5千兆字節時,纔會有泄漏。你需要調整你的耳朵之間的閾值:) –