作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在调试一个 C# 应用程序,它在几天后变得几乎没有响应。应用程序每秒计算一次内存/CPU 使用率,并将其显示在主 UI 的底部。
无响应的原因是获取 PerformanceCounter
(“Working Set - Private”)的 RawValue
需要时间。几天后,获取 RawValue
几乎需要一秒钟,卡住了主 UI 线程。如果我重新启动我的计算机,几天内一切都会再次变快,直到它慢慢变得不那么敏感。如果我在没有 PerformanceCounter
代码(它是开源的)的情况下重新编译这个应用程序,它会立即正常运行。
要排除它是应用程序的可能性,这里有一些示例代码执行完全相同的操作:
static void Main(string[] args)
{
using (var memoryWorkingSetCounter = new PerformanceCounter("Process", "Working Set - Private", Process.GetCurrentProcess().ProcessName, true))
{
while (!Console.KeyAvailable)
{
var memoryWorkingSetSw = new Stopwatch();
memoryWorkingSetSw.Start();
var memoryWorkingSetValue = memoryWorkingSetCounter.RawValue;
memoryWorkingSetSw.Stop();
Console.WriteLine(memoryWorkingSetValue.ToString());
Console.WriteLine(memoryWorkingSetSw.Elapsed.ToString());
Thread.Sleep(TimeSpan.FromSeconds(1));
}
}
Console.Read();
}
我让它运行了大约 2.5 天,并绘制了以毫秒为单位的 Elapsed
时间:
什么会导致 Windows 中的性能计数器随着时间的推移变慢?另一个应用程序不能清理它吗?有没有办法调试哪些应用程序也在查看此性能计数器?我在 Windows 10 上。
最佳答案
为什么要在循环内声明秒表?删除任何可能在循环内的新声明。
当你这样做时,内存会随着时间的推移而增加,你指望垃圾收集器来完成这项工作
关于c# - 为什么我的应用程序随着时间的推移变得响应速度变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53797800/
我是一名优秀的程序员,十分优秀!