C# 当不是活动窗口时,应用程序速度减慢

C# 当不是活动窗口时,应用程序速度减慢,c#,performance,C#,Performance,我的应用程序正在后台线程上执行一些简单的CSV文件读取和处理,设置为最高线程优先级。但是,我注意到,当应用程序不是活动窗口时,进程会显著减慢。即使打开记事本,阅读过程也会慢10倍左右,而当我点击返回应用程序时,它会恢复到正常速度 有没有办法防止经济放缓的发生?我认为使用ThreadPriority是为了实现这一点,但它似乎没有达到预期的效果 已尝试以下方法: Thread.CurrentThread.Priority = ThreadPriority.Highest; System.Diagno

我的应用程序正在后台线程上执行一些简单的CSV文件读取和处理,设置为最高线程优先级。但是,我注意到,当应用程序不是活动窗口时,进程会显著减慢。即使打开记事本,阅读过程也会慢10倍左右,而当我点击返回应用程序时,它会恢复到正常速度

有没有办法防止经济放缓的发生?我认为使用ThreadPriority是为了实现这一点,但它似乎没有达到预期的效果

已尝试以下方法:

Thread.CurrentThread.Priority = ThreadPriority.Highest;
System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime;
System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)0x0002;

这可能与操作系统调度程序的行为有关。它们倾向于增加具有活动窗口的进程的优先级,以增加用户体验,从而降低所有其他进程的优先级

增加线程优先级不起作用,因为此行为与进程相关,因此您可以尝试提高进程的优先级


如果这还不够,您可以尝试为该进程本身提供一个cpu内核。

ThreadPriority
定义进程内线程的优先级。是否尝试提高流程优先级?是否编辑了“我的问题”以显示一些已尝试但无效的代码。是否可以将CSV解析代码提取到仍然可以重现问题并共享的小应用程序中?我会有兴趣在探查器中进行探测。可能您正在后台线程和UI线程之间使用线程同步(例如,经常更新进度或向UI添加结果),并且大部分时间都花在同步上。如果您不与UI交互,我从未见过如此显著的速度减慢。我的“转到”解决方案是使用PerfView工具查看性能配置文件,即为进程本身提供一个处理器核心,我的意思是禁止其他进程使用这个核心。如果不允许其他进程使用特定的核心,那么您的进程应该能够一直使用它。如果以编程方式解决此问题,则软件可能需要管理员权限。