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