【问题标题】:Improving threading CPU usage in C#提高 C# 中的线程 CPU 使用率
【发布时间】:2018-10-13 03:13:19
【问题描述】:

我正在使用 SharpDX 制作一个 GUI 界面和相关代码以允许控制鼠标光标/模拟按键但即使在空闲时我的应用程序使用 15%+ cpu 到它增加我的 CPU 温度 +10C 而我的应用程序正在运行,这是控制器更新循环在其自己的线程中运行:

private void CallToChildThread()
{
    Program.stateOld = controller.GetState();
    while (controller.IsConnected)
    {
        Program.stateNew = controller.GetState();
        CheckButtons();
        Point cursor;
        GetCursorPos(out cursor);

        short tx;
        short ty;
        tx = Program.stateNew.Gamepad.LeftThumbX;
        ty = Program.stateNew.Gamepad.LeftThumbY;

        float x = cursor.X + _xRest;
        float y = cursor.Y + _yRest;

        float dx = 0;
        float dy = 0;

        // Handle dead zone
        float lengthsq = tx * tx + ty * ty;
        if (lengthsq > DEAD_ZONE * DEAD_ZONE)
        {
            float mult = speed * getMult(lengthsq, DEAD_ZONE, acceleration_factor);

            dx = getDelta(tx) * mult;
            dy = getDelta(ty) * mult;
        }

        x += dx;
        _xRest = x - (int)x;

        y -= dy;
        _yRest = y - (int)y;
        SetCursorPos((int)x, (int)y);
        Program.stateOld = Program.stateNew;
    }
}

CheckButtons 只是我用来检查按下了哪些按钮的函数,我尝试在控制器更新线程中运行它,但我无法让按钮按预期执行。

while() 和 GetCursorPos 对总 CPU 使用率的贡献最大。我尝试比较数据包编号,以便在不使用控制器时我的应用程序处于空闲状态,但这会导致处理光标位置出现重大问题(它非常缓慢且断断续续)

编辑:我已将线程设置为后台,并将其优先级设置为低于正常,但这并没有显着提高 CPU 使用率

【问题讨论】:

标签: c# multithreading sharpdx


【解决方案1】:

这是一个紧密的循环,因此它将充分利用 CPU 内核。只需在每次迭代结束时添加Thread.Sleep(10)。如果响应不够,请调整延迟,但在 10 毫秒内它将​​每秒轮询控制器状态 100 次,这已经很多了。

private void CallToChildThread()
{
    Program.stateOld = controller.GetState();
    while (controller.IsConnected)
    {
        // Your update logic
        Thread.Sleep(10); // Adjust the delay as needed
    }
}

另外,请注意降低线程优先级不会降低 CPU 使用率。如果没有足够的 CPU 可供每个人使用,它只是告诉你的线程让步给另一个线程,显然情况并非如此。

【讨论】:

  • 这很好,我不得不调整灵敏度,但 CPU 使用率已降至标称水平,感谢您的意见!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2018-09-13
相关资源
最近更新 更多