Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Thread.BeginThreadAffinity_C#_.net - Fatal编程技术网

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使用率。你的评论对我也没有任何帮助。谢谢分享。上下文切换确实需要成本。