我一直试图从我的一个程序中挤出更多的性能,并且阅读了优先级和亲和力设置,我偶然发现了Thread.BeginThreadAffinity,它的文档中写着:
通知主机托管代码即将执行依赖于当前物理操作系统线程标识的指令。
我在我的程序中对此进行了测试,性能提高了3-4% .据我所知,如果您的代码被移动到不同的物理操作系统线程,它将失去关联设置,但是使用Thread.BeginAffinity时,它将保持在同一个线程上,保持关联设置,因为我的关联设置被提升了,因此性能得到了提高。
是这样的吗?还是我误解了Thread.BeginAffinity?
发布于 2012-08-06 18:02:35
根据msdn,您是正确的
公共语言运行库的某些主机(如Microsoft 2005 )提供自己的线程管理。提供自己的线程管理的主机可以在任何时候将执行任务从一个物理操作系统线程移动到另一个物理操作系统线程。大多数任务不受此切换的影响。但是,有些任务有线程关联--也就是说,它们依赖于物理操作系统线程的标识。这些任务在执行不应该切换的代码时必须通知主机。 例如,如果应用程序调用system来获取具有线程关联的操作系统锁(如Win32 CRITICAL_SECTION ),则必须在获取锁之前调用BeginThreadAffinity,在释放锁后调用EndThreadAffinity。 在Server 2005下运行的代码中使用此方法需要在最高主机保护级别运行代码。
https://stackoverflow.com/questions/11833120
复制相似问题