WPF 应用程序分配大量 TimerQueueTimer 对象

问题描述 投票:0回答:1

我使用 .NET 8 构建了 WPF 应用程序,在某些时候它的 CPU 和内存突然激增。我设法捕获内存快照,似乎分配了很多

TimerQueueTimer
对象,不确定它们来自哪里。

这是截图:

enter image description here

有人有过这样的经历吗?我在这里看到了它:太多的 TimerQueueTimer 对象被分配并消耗高内存

但那是一个 ASP.NET 应用程序,通过更新到 ASP.NET Core 解决了问题,而我的是 WPF。

应用程序运行良好约 1 天,但 CPU 和内存消耗突然激增。它通常不应消耗更多~100M 的托管内存。

c# wpf memory-leaks timer .net-8.0
1个回答
0
投票

我也遇到了同样的问题,发现我有一个循环如下


while (true) {
   var cancelSource = new CancellationTokenSource();
   cancelSource.CancelAfter(50);
   var item = queue.Take(cancelSource.Token);
   if (!state.isValid(item)){
      queue.Add(item);
   }
} 
由于 if 条件总是被满足,它会创建新的 ` CancellationTokenSource ` 并在 cancelSource.CancelAfter(50) 中它将创建 TimerQueueTimer 对象。
© www.soinside.com 2019 - 2024. All rights reserved.