线程本地存储

时间:2010-11-16 02:43:08

标签: c# .net

将一些变量本地存储到每个线程的最佳方法是什么?

4 个答案:

答案 0 :(得分:48)

如果您使用的是.Net 4.0或更高版本,据我所知,建议的方法是使用System.Threading.ThreadLocal<T>,这也会使延迟初始化成为奖励。

答案 1 :(得分:37)

您可以使用[ThreadStatic]属性指示每个线程应存储静态变量:

[ThreadStatic]
private static int foo;

答案 2 :(得分:17)

在范围是您可以使用命名数据槽的问题的情况下的另一个选项 e.g。

    //setting
    LocalDataStoreSlot lds =  System.Threading.Thread.AllocateNamedDataSlot("foo");
    System.Threading.Thread.SetData(lds, "SomeValue");

    //getting
    LocalDataStoreSlot lds = System.Threading.Thread.GetNamedDataSlot("foo");
    string somevalue = System.Threading.Thread.GetData(lds).ToString();

如果你不能做James Kovacs和AdamSane所描述的

,这只是一个好主意

答案 3 :(得分:6)

其他选项是将参数传入线程启动方法。您需要保留范围,但可能更容易调试和维护。