我有一个用C#编写的命令行EXE.它的日志解析器每晚都会研磨几GB的日志文件.
它将处理器固定在100%很长一段时间.不理想.
我怎么能"扼杀"应用程序?它可能需要多长时间,但我宁愿让它使用更少的总CPU.
是否有一些编码方法或理论使EXE变慢并减少CPU占用?我无法在它运行的环境中做任何事情(比如更改进程优先级),因此任何更改都必须在应用程序本身的代码中.
试试这个:
using System.Diagnostics;
Process myProc = Process.GetCurrentProcess();
myProc.PriorityClass = ProcessPriorityClass.BelowNormal;
Run Code Online (Sandbox Code Playgroud)
如果这还不够低,那就有一个 ProcessPriorityClass.Idle
您可以使用Thread.Priority属性设置线程的优先级.
当然,如果没有其他任何尝试运行仍然会使用100%的CPU - 但我想在这种情况下你不介意这么多.
您的应用程序是否创建任何其他线程或使用线程池?如果是这样,您可能希望确保这些线程的优先级也降低.
编辑:设置流程的总体优先级通常可能是一个更好的解决方案,但我会将此作为替代方案.
您还可以将慢速睡眠引入与主处理器挂钩的主循环中.
例如,这通常通过游戏循环来完成 - Thread.CurrentThread.Sleep(1);每帧调用一次将使大多数游戏从使用100%cpu到使用1-2%cpu,并且仍允许合理访问.
-----编辑------
睡眠有可能降低进程或线程的优先级.主要的两个是:
-----来自原创-----
对于其他样式(UI)应用程序,另一个选项是重构您的例程以使其异常,将处理分解为多个部分,并通过订阅Application.OnApplicationIdle之类的函数在块中处理它.这可以让你的UI保持一定的响应,因为它将在spurts中运行.
如果这是一个数学例程,并且它正在进行大量计算,那么降低线程优先级并允许它使用最多可用的CPU可能会更好.
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |