我创建了一个新线程。下面是线程方法代码:
while (true)
{
if (!showHelp)
{
Console.Clear();
Console.WriteLine("==============================================");
Console.WriteLine(player.PlayList.CurrentTrack().Artist + " "
+ player.PlayList.CurrentTrack().Title + " "
+ player.PlayList.CurrentTrack().Genre.ToString());
Console.WriteLine(" [ " + pos.Duration() + " / "
+ player.PlayList.CurrentTrack().Length + " ] ");
Console.WriteLine("===============================================");
}
Thread.Sleep(1000);
if (isPlaying)
pos += TimeSpan.FromSeconds(1);
if (pos > player.PlayList.CurrentTrack().Length)
{
pos = TimeSpan.Zero;
player.Next();
}
}
我想更改控制台中的当前轨道位置。每次迭代我都会休眠 1 秒并添加 1 秒到位置。
我在无限循环中执行此操作,并且我的处理器似乎处于 50% 的负载下。
我应该怎样做才能减少循环迭代之间处理器上的负载?
最佳答案
CPU 负载似乎更有可能是由正在播放的媒体造成的,而不是由这段代码造成的。
您有双核或超线程 CPU 吗?在这种情况下,50%(例如在 Perfmon 中)对应于一个 CPU 正在完全使用 - 这可能是媒体播放器 - 意味着这里的代码(本质上)是空闲的。这就是您每次休眠 1 秒时所期望的结果 - 对于 CPU 而言,这就是永恒。
媒体播放是一个非常占用 CPU 资源的过程,除了点击“停止”或“暂停”之外,您无能为力来缓解这一问题。
关于c# - 如何减少线程无限循环期间的处理器使用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354297/