.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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д