我创建了一个新线程。这是一个线程方法代码:
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%。
如何减少循环迭代之间处理器的负载?
答案 0 :(得分:2)
CPU负载似乎更有可能是由于正在播放的媒体而不是此代码。
您是否拥有双核或超线程CPU?在这种情况下,50%(例如,在Perfmon中)对应于一个正在使用的CPU - 这可能是媒体播放器 - 这意味着您的代码在这里(基本上)是空闲的。这就是你一次睡1秒钟时所期望的 - 这在CPU方面是永恒的。
媒体播放是一个非常耗费CPU的过程,除了点击“停止”或“暂停”之外,您无法做很多其他事情。
答案 1 :(得分:2)
为什么不使用Timer
来更新当前位置并使用Stopwatch
或仅使用常规DateTime
来衡量已用时间。
这样你首先就没有无限循环。