比较未命名的数据广告位和ThreadLocal ...
MSDN只说
在.NET Framework 4中,您可以使用 System.Threading.ThreadLocal类创建线程局部对象 在首次使用对象时,它会被懒惰地初始化。对于 有关更多信息,请参阅延迟初始化。
如果我对懒惰的init很好,ThreadLocal似乎是最好的选择...它使用起来更简单,不需要转换。在选择其中一个时,还有其他需要考虑的事项吗?
答案 0 :(得分:2)
正如我在评论中所说,ThreadLocal<T>
是使用Thread Local Dataslots API实现的。您可以通过查看ThreadLocal source code来确认。除非您有一些令人信服的理由在Windows API级别工作,否则最好使用ThreadLocal<T>
。
选择ThreadLocal<T>
的一个非常好的理由是它确保为每个线程初始化值。 ThreadStatic
不会这样做,并且您的线程本地数据槽API的接口也必须专门为它编写代码。有关详细信息,请参阅https://stackoverflow.com/a/18337158/56778。
使用ThreadLocal<T>
进行延迟初始化。你会为自己省下很多痛苦。