C# Thread.BeginThreadAffinity
我一直试图从我的一个程序中挤出更多的性能,在阅读优先级和关联设置时,我遇到了C# Thread.BeginThreadAffinity,c#,.net,C#,.net,我一直试图从我的一个程序中挤出更多的性能,在阅读优先级和关联设置时,我遇到了Thread.BeginThreadAffinity,它的文档说明: 通知主机托管代码即将执行指令 这取决于当前物理操作系统的标识 线 我在程序中对此进行了测试,性能提高了3-4%。据我所知,如果您的代码被移动到不同的物理操作系统线程,它将丢失关联设置,但使用thread.BeginAffinity它将保持在同一线程上,保持关联设置,因为我的关联设置被提升,所以我的性能得到了提高 它是这样工作的,还是我误解了Thread
Thread.BeginThreadAffinity
,它的文档说明:
通知主机托管代码即将执行指令
这取决于当前物理操作系统的标识
线
我在程序中对此进行了测试,性能提高了3-4%。据我所知,如果您的代码被移动到不同的物理操作系统线程,它将丢失关联设置,但使用thread.BeginAffinity
它将保持在同一线程上,保持关联设置,因为我的关联设置被提升,所以我的性能得到了提高
它是这样工作的,还是我误解了Thread.BeginAffinity 根据您的判断,您是正确的
公共语言运行库的某些主机,如Microsoft SQL
Server2005,提供自己的线程管理。提供
它自己的线程管理可以将正在执行的任务从一个物理层移动
随时将操作系统线程连接到另一个线程。大多数任务并非如此
受此切换的影响。但是,有些任务具有线程关联性-
也就是说,它们取决于物理操作系统的标识
线这些任务在执行以下代码时必须通知主机:
不应切换
例如,如果应用程序调用系统API以获取
具有线程关联性的操作系统锁,如Win32
临界_部分,在获取之前必须调用BeginThreadAffinity
锁定,并在释放锁定后释放EndThreadAffinity
在SQL Server 2005下运行的代码中使用此方法需要
要在最高主机保护级别上运行的代码
据我所知,你是对的
公共语言运行库的某些主机,如Microsoft SQL
Server2005,提供自己的线程管理。提供
它自己的线程管理可以将正在执行的任务从一个物理层移动
随时将操作系统线程连接到另一个线程。大多数任务并非如此
受此切换的影响。但是,有些任务具有线程关联性-
也就是说,它们取决于物理操作系统的标识
线这些任务在执行以下代码时必须通知主机:
不应切换
例如,如果应用程序调用系统API以获取
具有线程关联性的操作系统锁,如Win32
临界_部分,在获取之前必须调用BeginThreadAffinity
锁定,并在释放锁定后释放EndThreadAffinity
在SQL Server 2005下运行的代码中使用此方法需要
要在最高主机保护级别上运行的代码
4%的性能差异在统计上没有意义。我会尽我所能,当线程亲和力增加时,我似乎会持续获得更高的CPU使用率。你的评论对我也没有任何帮助。谢谢分享。上下文切换确实需要成本。4%的性能差异在统计上没有意义。我将尽我所能,当线程关联性增加时,我似乎一直在使用它来获得更高的CPU使用率。你的评论对我也没有任何帮助。谢谢分享。上下文切换确实需要成本。