2009-02-03 74 views

回答

3

你可以简单地通过对当前进程的处理器亲和性设定值来设置该为你的应用程序的开头:

System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity <- nativeint 1 

这将有效地限制使用过程中系统上的第一个CPU核心。

2

调整寄存器或使用Process.ProcessorAffinty直接修改windows进程调度器。这是一个糟糕的做法,因为它依赖于平台,而且还会产生难以确定原因的程序行为。如果可能的话,最好通过.NET本身来完成,而不使用像System.Diagnostics.Process这样的PInvoke包装器。

如果你只想要你的应用程序中添加使用一个单独的线程我建议设置垃圾收集器是非并发以下到您的app.config:

<configuration> 
    <runtime> 
     <gcConcurrent enabled="false"/> 
    </runtime> 
</configuration> 

欲了解更多信息,请参阅我的文章关于此主题here

如果要设置线程数的上限和下限的显式限制,最好使用ThreadPool对象。通过使用SetMaxThreadsSetMinThreads,您可以安全地执行这些限制,而无需触摸Windows系统调度程序。

使用ThreadPool的唯一重要限制是在使用此方法时,不能将线程的最小数目设置为小于计算机中处理器的数量。

+0

就我所知,F#应用程序不使用app.config文件。至少我没有看到添加一个选项,当我点击将项目添加到项目中时。 – 2009-02-06 17:42:47