Multithreading 关闭多线程或限制F#中的内核使用?

Multithreading 关闭多线程或限制F#中的内核使用?,multithreading,f#,Multithreading,F#,有没有办法关闭多线程或限制F#app使用的内核数量?我知道这不会在生产环境中完成,但我很好奇是否必须在单核系统上安装应用程序,以查看其性能。您可以通过,这将根据需要限制您的应用程序。您只需在应用程序开始时设置当前进程的ProcessorAffinity值即可: System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity <- nativeint 1 System.Diagnostics.Process.GetCurre

有没有办法关闭多线程或限制F#app使用的内核数量?我知道这不会在生产环境中完成,但我很好奇是否必须在单核系统上安装应用程序,以查看其性能。

您可以通过,这将根据需要限制您的应用程序。

您只需在应用程序开始时设置当前进程的ProcessorAffinity值即可:

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

System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity调整寄存器或使用Process.ProcessorAffinty直接修改windows进程调度程序。这是一种不好的做法,因为它依赖于平台,而且还可能产生难以确定错误原因的程序行为。如果可能的话,最好通过.NET本身执行此操作,而不使用诸如System.Diagnostics.Process之类的PInvoke包装器

如果您只希望应用程序使用单个线程,我建议将垃圾收集器设置为非并发,方法是在app.config中添加以下内容:

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

有关更多信息,请参阅我关于此主题的帖子

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


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

F#据我所知,应用程序不使用app.config文件。至少我在单击向项目添加项目时没有看到添加选项。app.config实际上由CLR本身使用,因此与语言无关。