.net ThreadStatic与ThreadLocal的对比<;T>;性能:加速还是替代?

.net ThreadStatic与ThreadLocal的对比<;T>;性能:加速还是替代?,.net,thread-local,threadstatic,.net,Thread Local,Threadstatic,我最近读到-它们显然比正常的现场访问慢60倍。.NET4的ThreadLocal性能更好吗 有没有提供高性能线程特定存储的替代方案?请记住,那是在2008年-我相信.NET 4在ThreadStatic字段中比.NET 3.5快得多。我记不清了,但是如果你愿意,你可以运行测试 也就是说,我并不真的相信测试描述——因为它是不现实的。您真的需要在循环中重复读取线程本地字段吗?你是不是更可能读一次,然后在稍后的一段不同的代码中读一次 最终,真正的问题是,这些方法中的一种或两种是否都能满足您的特定需求。

我最近读到-它们显然比正常的现场访问慢60倍。.NET4的ThreadLocal性能更好吗


有没有提供高性能线程特定存储的替代方案?

请记住,那是在2008年-我相信.NET 4在
ThreadStatic
字段中比.NET 3.5快得多。我记不清了,但是如果你愿意,你可以运行测试

也就是说,我并不真的相信测试描述——因为它是不现实的。您真的需要在循环中重复读取线程本地字段吗?你是不是更可能读一次,然后在稍后的一段不同的代码中读一次


最终,真正的问题是,这些方法中的一种或两种是否都能满足您的特定需求。我更喜欢
ThreadLocal
而不是
ThreadStatic
,这并不是出于性能原因,而是因为它允许进行适当的初始化—例如,请参阅my。

他们说
[ThreadStatic]
Thread.allocatedastaslot
性能好得多

ThreadLocal
(根据Reflector)的实现有16种专用类型,它们只在封面下使用
[ThreadStatic]
。一旦它们用完且未被释放,
本地
将切换到
线程。AllocateDataSlot
。(实际上,每个
似乎有16^3个插槽,他们做了一个非常有趣的方案,创建泛型类型来容纳插槽)

所以我想
[ThreadStatic]
是最快的


记住要经常检查泄漏的抽象并查看实现!不要过早地跳过这样的优化;-)

关于random的文章很棒,谢谢你的回答Jon。我最终选择了ThreadLocal,因为它比ThreadStatic更智能(而且实例安全)。很好的猜测,我已经“基准测试”了ThreadLocal和ThreadStatic,开销约为x16。但正如Jon在99.9999999%的案例中所注意到的,这与此无关,您会更喜欢ThreadLocal而不是ThreadStatic,因为它更为用户友好。