如何在用户不在时防止可移植C#进程变慢?

时间:2018-12-09 23:30:41

标签: c# windows performance headless

我编写了一个C#程序,该程序几乎可以在后台完美运行,但是如果机器被锁定并独自放置,它的速度就会降低。

它每100毫秒打开和关闭一个板载LED,并通过“ System.Threading.Thread.Sleep(100)”调用来计时100毫秒。 (这是用于无头系统(无键盘或显示器)的,它需要闪烁以指示各种状态。)

问题出在系统闲置一会儿并且桌面锁定时...闪烁停止...但是如果我回到机器并登录(现在还不是无头的话),LED就会开始闪烁加速并再次全速闪烁。

我怀疑Windows可能正在执行某种电源管理方案,从而减慢了保存电源的过程(?)。

为清楚起见,设备永远不会进入“睡眠”或“休眠”状态,并且当我重新登录并再次移动鼠标一秒钟时,该过程将返回到正常节奏。使用管理员权限以登录用户身份运行。

此机器上绝对没有防病毒软件。正在使用的资源(内存/ CPU)很小,并且之前和之后的资源基本相等。

有人知道如何构建或执行C#流程,即使用户锁定了桌面并走了几个小时,它仍能以正常速度运行?

编辑:循环中包含的示例代码:

       while (true) {                

            foreach (var step in steps) 
            {
                var mode = step.Mode;
                var millis = step.Millis;
                switch (mode.ToUpper())
                {
                    //Set LED as per Mode Switch
                }
                System.Threading.Thread.Sleep(millis);
            }

            if (!loopForever) {
                //User wanted single pattern and then exit
                Environment.Exit(0);
            }
        }

1 个答案:

答案 0 :(得分:0)

我们通过使用以下方法解决了WPF应用程序上的此类问题:

var executionState = NativeMethods.SetThreadExecutionState(EXECUTION_STATES.ES_CONTINUOUS | EXECUTION_STATES.ES_SYSTEM_REQUIRED);
NativeMethods.SetThreadExecutionState(executionState);

我希望它可以为您提供帮助。这里还有更多documentation