gpt4 book ai didi

.net - 在 .NET 中使用线程本地存储的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-04 10:33:22 27 4
gpt4 key购买 nike

我在我的应用程序中有一个要求,我认为可以通过使用线程本地存储来满足它,但我想知道它是否是最好避免的事情之一。

我已经阅读了一些关于这个主题的文章:

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。

在我的网络应用程序中的 global.asax 中,当我遇到未处理的异常时,我会向管理员发送电子邮件,其中包含尽可能多的信息。当我收到 SqlException 时,我想将该 sql 命令转储文本放入这封电子邮件中,这将节省我在页面因查询而爆炸时挖掘跟踪日志的时间。

我不想更改我的数据访问类的方法签名,这样我就可以在堆栈中一直传递一些引用,以便在遇到异常时将其取出。我在想也许 TLS 是放置诸如“lastsqlcommand”之类的东西的好地方,但这看起来不是一个可行的解决方案。

最佳答案

asp.net 应用程序的一个问题:单个请求的处理可能会切换线程,即同一 session 中是否存在并行请求。因此,您在 HttpApplication.PostRequireRequestState 事件之前放入 TLS 的任何内容稍后可能不会出现,因为您在不同的线程上。

[由提问者编辑]

对于我的特定用例,我最终向 SqlException.Data 字典添加了一个键值对,然后在我记录异常详细信息时检索它。这给了我希望使用线程本地存储的功能。

关于.net - 在 .NET 中使用线程本地存储的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/175129/

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