设置分析的CPU亲和力

我正在研究一个计算密集的C#项目,它实现了几个algorithm。 问题是,当我想要分析我的应用程序时,特定algorithm花费的时间会有所不同。 例如,有时运行100次的algorithm需要大约1100毫秒,而另一次运行100次需要更多的时间,比如2000甚至3000毫秒。 即使在同一个运行中,它可能会有所不同 所以当我优化一段代码的时候不可能测量到改进。 这只是不可靠的。

在这里输入图像说明

这是另一个运行:

在这里输入图像说明

所以基本上我想确保一个CPU专用于我的应用程序。 个人电脑有一个旧的双核英特尔E5300 CPU运行在Windows 7 32位 。 所以我不能只设置进程关系,永远忘记一个核心。 这会使电脑在日常工作中非常缓慢。 我需要其他应用程序来使用特定的核心,当我完成分析时,CPU的亲和力恢复正常。 有一个bat文件来完成任务将是一个梦幻般的解决scheme。

我的问题是:是否有可能有一个bat文件来设置每个进程的进程亲和力在Windows 7上?

PS:algorithm是正确的,每次运行相同的代码path。 我第一次运行后创build了一些对象池,分配了零内存。 我也用dottrace分析了内存分配,第一次运行后没有显示分配。 所以我不相信当algorithm运行时触发GC。 物理内存可用,并且RAM上的系统运行不足。

结果: Chris Becke的答案完成了这项工作,并完全按照预期设定了工艺亲和力。 它导致更加统一的结果,特别是当像Visual Studio和dottrace这样的后台应用程序正在运行时。 对不同执行时间的进一步调查发现,不可预测性的根源是CPU过热。 温度超过100C时CPU过热报警closures! 所以在修理故障风扇之后,结果变得完全一致。

你的意思是SetProcessAffinityMask ?

我看到这个问题,而标记的窗口,是C#,所以…我看到System.Diagnostics.Process对象有一个ThreadAffinity成员应执行相同的功能。

我只是不确定这将会如你所期望的那样稳定CPU时间。 一个没有做IO的繁忙任务应该保持在同一个核心上,除非另一个线程中断它,所以我认为你的变量时间更多的是由于其他线程/进程中断你的算法,而不是OS随机将你的线程分流到不同的核心 – 所以除非你设置系统中的所有其他线程的亲和力来排除你的首选核心,我看不到这个帮助。