8

我正在为我的 C# 应用程序使用 Haptek People Putty 播放器,我在论坛上看到人们说它不适用于多核处理器。我的应用程序在我的 Core 2 Duo 笔记本电脑上运行良好,但当我尝试在四核台式机上运行它时,它会滞后很多。我正在考虑为自己进行调查,在这种情况下,我将不得不强制我的应用程序在单核上运行。这在 C# 中可能吗?

4

3 回答 3

5

Process变量proc保存您关心的进程(对于Process.GetCurrentProcess()正在运行的进程,从另一个进程获取它GetProcesses()等等GetProcessesByName()。然后:

foreach(ProcessThread pt in proc.Threads)
{
   pt.IdealProcessor = 0;
   pt.ProcessorAffinity = (IntPtr)1;
}

IdealProcessor 是一个从零开始的单核标识。ProcessorAffinity 是一个位掩码,因此 1 允许核心 0,2 允许核心 1,3 允许核心 0 和 1,4 允许核心 2,依此类推。

我会彻底测试这个。很有可能这实际上会损害您的性能,降低使用不同内核的能力,毕竟这通常是一个优势。

于 2010-08-07T10:33:41.000 回答
2

如果应用程序是单线程的,它就不会利用多核。但是,内核可能会在内核之间颠簸线程。我怀疑这是您的性能问题的原因。

如果您想将线程绑定到单个核心(不确定是否可以保证),您可能需要查看该System.Diagnostics.ProcessThread.ProcessorAffinity属性,尽管我自己从未使用过它。

于 2010-08-07T10:08:20.590 回答
1
  • 在 C# 中不太可能。好吧,我不知道。您需要互操作,这样才能正常工作。

  • 你在使用多个线程吗?如果不是 - 嗯 - 对不起 - 你可以做的不多。无论如何,标准 UI 应用程序不使用多核。

基本上,不使用线程(工作项使用线程)的应用程序本质上是单核的。

于 2010-08-07T10:01:31.380 回答