【发布时间】:2025-12-05 10:30:01
【问题描述】:
我的应用程序中有一个要求,我认为可以通过使用线程本地存储来满足,但我想知道这是否是最好避免的事情之一。
我已经阅读了一些关于这个主题的文章:
http://www.dotnetcoders.com/web/Articles/ShowArticle.aspx?article=58
http://msdn.microsoft.com/en-us/library/system.threadstaticattribute(vs.80).aspx
我知道如何使用它,我只是想知道我是否应该使用它。
有什么建议和注意事项吗?
[编辑]
这是用例:
我通过一些方法汇集所有数据访问,这些方法对每个查询进行大量记录。我记录的一件事是命令文本的完整转储,其中填充了命令,以便我可以简单地从跟踪日志中直接复制粘贴到 Sql Management Studio 中。
在我的 web 应用程序中的 global.asax 中,当我遇到未处理的异常时,我会向管理员发送尽可能多的信息的电子邮件。当我收到 SqlException 时,我想将那个 sql 命令转储文本放入这封电子邮件中,这将节省我在页面因查询而崩溃时挖掘跟踪日志的时间。
我不想更改我的数据访问类的方法签名,这样我就可以将一些引用一直传递到堆栈中,只是为了在我遇到异常时将其取出。我在想也许 TLS 是放置“lastsqlcommand”之类的好地方,但这看起来不是一个可行的解决方案。
【问题讨论】:
-
我一直避免使用线程本地存储,并找到了另一种方法来做同样的事情。我的想法一直是线程本地存储可能比直接访问慢(不确定这是否正确)。我也很好奇其他人的想法。
标签: .net multithreading thread-local