比較不知名的數據插槽和ThreadLocal的...爲什麼在ThreadLocal上使用數據插槽?
MSDN只是說
在.NET Framework 4,你可以使用 System.Threading.ThreadLocal類來創建線程本地對象 那當對象第一次被消費時,它會被懶惰地初始化。有關 的更多信息,請參閱延遲初始化。
如果我沒有懶惰的init,ThreadLocal看起來是最好的選擇......它使用起來更簡單,並且不需要強制轉換。當選擇另一個時,是否還有其他的事情需要考慮?
比較不知名的數據插槽和ThreadLocal的...爲什麼在ThreadLocal上使用數據插槽?
MSDN只是說
在.NET Framework 4,你可以使用 System.Threading.ThreadLocal類來創建線程本地對象 那當對象第一次被消費時,它會被懶惰地初始化。有關 的更多信息,請參閱延遲初始化。
如果我沒有懶惰的init,ThreadLocal看起來是最好的選擇......它使用起來更簡單,並且不需要強制轉換。當選擇另一個時,是否還有其他的事情需要考慮?
正如我在評論中所說,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>
進行延遲初始化。你會爲自己節省很多痛苦。
在Windows上,使用Thread Local Dataslots API實現'ThreadLocal'。除非你有一些令人信服的理由在Windows API級別工作,否則最好使用'ThreadLocal '。 –