当前位置:  开发笔记 > 编程语言 > 正文

如何限制长时间运行的命令行EXE以避免挂断CPU?

如何解决《如何限制长时间运行的命令行EXE以避免挂断CPU?》经验,为你挑选了3个好方法。

我有一个用C#编写的命令行EXE.它的日志解析器每晚都会研磨几GB的日志文件.

它将处理器固定在100%很长一段时间.不理想.

我怎么能"扼杀"应用程序?它可能需要多长时间,但我宁愿让它使用更少的总CPU.

是否有一些编码方法或理论使EXE变慢并减少CPU占用?我无法在它运行的环境中做任何事情(比如更改进程优先级),因此任何更改都必须在应用程序本身的代码中.



1> St. John Joh..:

试试这个:

using System.Diagnostics;

Process myProc = Process.GetCurrentProcess();
myProc.PriorityClass = ProcessPriorityClass.BelowNormal;

如果这还不够低,那就有一个 ProcessPriorityClass.Idle

MSDN链路1
MSDN链路2



2> Jon Skeet..:

您可以使用Thread.Priority属性设置线程的优先级.

当然,如果没有其他任何尝试运行仍然会使用100%的CPU - 但我想在这种情况下你不介意这么多.

您的应用程序是否创建任何其他线程或使用线程池?如果是这样,您可能希望确保这些线程的优先级也降低.

编辑:设置流程的总体优先级通常可能是一个更好的解决方案,但我会将此作为替代方案.



3> Reed Copsey..:

您还可以将慢速睡眠引入与主处理器挂钩的主循环中.

例如,这通常通过游戏循环来完成 - Thread.CurrentThread.Sleep(1);每帧调用一次将使大多数游戏从使用100%cpu到使用1-2%cpu,并且仍允许合理访问.

-----编辑------

睡眠有可能降低进程或线程的优先级.主要的两个是:

通过睡眠,您可以更好地控制放弃的处理器时间.如果降低优先级,并且还有其他CPU饥饿进程,则可能会放弃比预期更多的处理器时间.[这就是为什么我没有做睡眠(0),因为这不会总是放弃处理器时间,虽然它确实放弃了一些.我已经在具有更长睡眠时间的嵌入式系统中完成了这项工作,以减少处理器的使用量.

如果您的目标是降低总CPU使用率,那么在没有其他任何运行的情况下降低进程优先级将无济于事.你还会吃掉100%的CPU.如果您尝试保持功耗(节省能源成本)或尝试降低发热量,这可能会有用,具体取决于系统的体系结构.

-----来自原创-----

对于其他样式(UI)应用程序,另一个选项是重构您的例程以使其异常,将处理分解为多个部分,并通过订阅Application.OnApplicationIdle之类的函数在块中处理它.这可以让你的UI保持一定的响应,因为它将在spurts中运行.

如果这是一个数学例程,并且它正在进行大量计算,那么降低线程优先级并允许它使用最多可用的CPU可能会更好.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有