.NET 4.x Утечка памяти при использовании системного счетчика - C#
Формулировка задачи:
Есть некий класс с событием upTimeUpdated (подписчикам отдается время работы ОС)
При создании экземпляра UpTimeCounter и подписки на это событие наблюдаю утечку памяти в приложении. Почему так может быть?
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); }
Решение задачи: «.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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д