.NET 4.x Утечка памяти при использовании системного счетчика - C#

Узнай цену своей работы

Формулировка задачи:

Есть некий класс с событием upTimeUpdated (подписчикам отдается время работы ОС)
public class UpTimeCounter
    {
        private PerformanceCounter counter;
        private Timer checkingTimer;
 
        Logger logger = LogManager.GetLogger("UpTimeCounter");
 
        public event EventHandler<string> upTimeUpdated;
 
        public UpTimeCounter(int period)
        {
            counter = new PerformanceCounter("System", "System Up Time");
 
            period = period < 1 ? period : 1000;
 
            StartTimer(period);  
        }
 
        private void StartTimer(int period)
        {
            TimerCallback tcb = new TimerCallback(CheckingTimerCallback);
 
            checkingTimer = new Timer(tcb, null, 0, period);
        }
 
        public void CheckingTimerCallback(object o)
        {
            logger.Trace("CheckingTimerCallback has called");
 
            string upTime = "no data";
 
            try
            {                
                counter.NextValue();
                upTime = string.Format(TimeSpan.FromSeconds(counter.NextValue()).ToString(@"dd\d\a\y\s\ hh\h\o\u\r\s\ mm\m\i\n\u\t\e\s\ ss\s\e\c\o\n\d\s"));
            }
            catch (Exception e)
            {
                logger.Error("error getting uptime: {0}\r\nType: {1}\r\nSource: {2}\r\nStackTrace:\r\n{3}", e.Message, e.GetType(), e.Source, e.StackTrace);
                return;                           
            }
            
            upTimeUpdated?.Invoke(this, upTime);            
        }
При создании экземпляра UpTimeCounter и подписки на это событие наблюдаю утечку памяти в приложении. Почему так может быть?

Решение задачи: «.NET 4.x Утечка памяти при использовании системного счетчика»

textual
Листинг программы
1> !hq tabular from s in ObjectsOfType("System.String") where s.__Size > 100 select new { Str = (string)s, Size = s.__Size }
Str                                                 Size
...C:\Temp\VSDebugging\bin\Debug\VSDebugging.exe.C  118
C:\Temp\VSDebugging\bin\Debug\VSDebugging.exe       104
C:\Windows\Microsoft.NET\Framework\v4.0.30319\      106
...C:\Windows\Microsoft.NET\Framework\v4.0.30319\c  148
...System\CurrentControlSet\Control\Nls\RegionMapp  114
Rows: 5
Time: 697 ms, Memory start: 125.262kb, Memory end: 160.242kb, Memory delta: +34.980kb

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы