gpt4 book ai didi

c# - C# 类库的线程本地存储

转载 作者:可可西里 更新时间:2023-11-01 08:37:50 26 4
gpt4 key购买 nike

我有一个非常古老但非常大的库,我正在考虑将其转换为 C# 类库。现有的库使用了很多存储在 TLS 中的全局变量。 C# 没有全局变量的真正概念,但一种解决方法是使用一个名为 GlobalVar 之类的静态类,并将它们全部放在此类中,以便可以通过 GlobalVar.xxxxxx 访问它们

但是,我的想法是,这将破坏所有正在转换的现有代码,因为 GlobalVar 类将是一个普通的全局类,而不是每个线程存储。有没有办法让这些全局变量成为每个线程?即 C# 中 __declspec (thread) static 的等价物是什么?

我应该补充一点,我讨厌全局变量。我认为它们通常是设计不佳的结果。但是,由于时间紧迫,第一阶段是将库转换为 C#,然后第二阶段将适本地重新设计它们。

最佳答案

ThreadLocal类(在 4.0 中引入)和 ThreadStaticAttribute .

ThreadStaticAttribute 只能用于static 字段。 ThreadLocal 类可用于“普通”字段,但速度较慢。

请注意,如果您不控制您所在的线程(例如,您是 ASP.NET 的一个页面并且您从一个“随机”预用线程开始,或者您是一个 ThreadPool 的线程) ,那么你的“线程静态”(一般来说,不是属性)变量将使用前一个线程的旧值进行预初始化。 (参见示例 A tale of two techniques: The [ThreadStatic] Attribute and System.Web.HttpContext.Current.Items)

我忘记了,还有 Thread.AllocateDataSlot具有与其他人相似的“目标”。

关于c# - C# 类库的线程本地存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7850874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com