gpt4 book ai didi

c# - 内存问题和 ThreadLocal

转载 作者:太空狗 更新时间:2023-10-29 20:28:56 26 4
gpt4 key购买 nike

我注意到 ThreadLocal<T>工具 IDisposable ,这意味着我应该在使用完线程局部变量后处理它。我只是好奇具体的问题是什么以及我应该小心做什么和/或避免做什么。

当线程退出时,线程的本地存储会被处理掉吗?如果我不处理我的 ThreadLocal 成员,最坏的情况是什么?

如果我有一个全局线程局部变量(矛盾修饰法?呵呵)(或者一个 ThreadStatic 变量)并且我将这个值分配给 ThreadPool 中的线程,会怎样?我是否必须小心取消分配线程本地值,或者这不是问题?

最佳答案

我不相信线程局部变量会在线程存在时自动处理 - 这仍然留给开发人员来实现。 来自 MSDN:

Always call Dispose before you release your last reference to the ThreadLocal. Otherwise, the resources it is using will not be freed until the garbage collector calls the ThreadLocal object's Finalize method.

但是,如果您的线程本地类型不消耗任何可释放资源(例如 int 或其他基本类型),则可能可以不处置它,因为垃圾收集器最终会处理它。

让多个 ThreadLocal 对象引用同一个对象实例通常是不明智的 - 事实上,这违背了线程本地存储通常寻求实现的目标。孤立的线程局部变量可以被假定为“线程安全的”——从某种意义上说,没有其他线程(原则上)应该可以访问它们。请记住,线程安全是一个微妙的概念,需要您建立关于共享内存的特定约束和期望......我在这个上下文中使用这个术语是在宽泛的意义上。

关于c# - 内存问题和 ThreadLocal<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760347/

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