2009-02-03 26 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