c# - 如何减少线程无限循环期间的处理器使用率?

标签 c# .net multithreading optimization cpu-usage

我创建了一个新线程。下面是线程方法代码:

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/

相关文章:

c# - .NET Core 2.1/Angular - SignalR 只需 2 分钟即可连接到集线器

c# - 按日期订购 List<T>,但它有一个字符串 ID,如果该 ID 在集合中以不同的日期重复出现,则应出现在它的下方

c# - 在值类型上定义的扩展方法不能用于创建委托(delegate)——为什么不呢?

java - Android 多线程应用程序崩溃

c# - wcf 测试客户端不支持此操作,因为它使用 system.threading.tasks.task

java - 未抛出 FileAlreadyExistsException 并覆盖文件

c# - 我应该创建多少个 HttpClient?

.net - WPF - 使用 MVVM 根据模型的不同状态禁用和启用不同控件的优雅方式

.net - Compression.ZipFile 引发 ArgumentException "The path is not of a legal form"

.net - 什么版本的 .NET 附带什么版本的 Windows?