6

TraceSource 类的 MSDN 文档有一个示例,说明 app.config 文件如何列出 TraceSource 实例的信息:

http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx

但是,没有关于 TraceSource 值存储在哪里的信息......现有的 TraceSource 对象存储在哪里?它们是什么时候(编辑:它们的意思是配置的实例)构造的?TraceSource 对象如何知道在创建 TraceSource 对象时如何返回命名实例(编辑:应该配置实例)而不是新实例?我可以在不使用反射的情况下找到现有 TraceSource 对象的列表吗?

4

2 回答 2

2

TraceSource 类保留一个私有的源列表。但除了 TraceSource 类本身之外,任何人都无法访问。

.config 文件部分旨在为跟踪源配置侦听器。因此,当您在代码中创建 TraceSource 时,它​​会使用您在构造函数中传递的名称并查看 .config 文件以查看应该自动添加或删除哪些侦听器。

所以代码创建一个源,.config 文件配置它。不是相反,.config 文件不能创建源。

于 2012-12-13T23:07:01.880 回答
0

TraceSource 对象存储?

在静态集合中(因此每个应用程序域一个副本),但在 .NET 版本中,它们与弱引用一起存储,如果创建太多可能导致内存泄漏。如果我没记错的话,单声道版本没有这个问题。

有关详细信息,我建议阅读源代码——Mono 源代码更容易追踪,因为它们是正式开放的。

它们是什么时候建造的?

当正在编写跟踪的应用程序写入 TraceSource source = new TraceSource();

TraceSource 对象如何知道在创建 TraceSource 对象时如何返回命名实例而不是新实例?

没有把握。

我可以在不使用反射的情况下找到现有 TraceSource 对象的列表吗?

过去可以使用 RedGate Reflector 做到这一点。System.Net 和 WCF 库使用 Systems.Diagnostics,但很少有人这样做。API 中没有办法只询问当前跟踪源的运行时,这将是一个不错的功能。

于 2012-12-13T23:07:11.997 回答