代码之家  ›  专栏  ›  技术社区  ›  Mark

线程静态与线程本地性能:加速还是替代?

  •  22
  • Mark  · 技术社区  · 14 年前

    我最近看了 this post about poor performance of fields marked ThreadStatic -它们显然比正常的野外作业慢了60倍。.NET 4的线程本地性能是否更好?

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

    2 回复  |  直到 10 年前
        1
  •  30
  •   Jon Skeet    14 年前

    记住那是在2008年-我 相信 对于 ThreadStatic .NET 3.5以前的字段。我记不清了,但如果你愿意,你可以运行测试。

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

    最终,真正的问题是,这些方法中的一个或两个是否能够很好地满足您的特定需求。我更喜欢 ThreadLocal<T> 螺纹静态 不是因为性能原因,而是因为它允许适当的初始化-请参见 article on randomness 例如。

        2
  •  22
  •   filmor    10 年前

    他们这么说 [ThreadStatic] Thread.AllocateDataSlot .

    实施 ThreadLocal<T> (根据反射镜)有16种专用类型 [螺纹静态] 在盖子下面。一旦他们用完了而没有释放, TheadLocal<T> 切换到 线程.allocatedataslot . (实际上,每个 <T> ,它们执行了一个非常有趣的方案,即创建通用类型来容纳插槽)

    所以我想 [螺纹静态] 是最快的。

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

    推荐文章