如何在.NET程序中解析TraceSource名称?

时间:2012-12-13 21:28:33

标签: c# .net app-config tracesource

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

因此代码创建了一个源,.config文件配置它。不是相反,.config文件无法创建源。

答案 1 :(得分:0)

  

存储TraceSource对象?

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

有关详细信息,我建议您阅读来源 - Mono来源更容易追踪,因为它们正式开放。

  

他们什么时候建造?

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

  

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

不确定。

  

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

曾经可以使用RedGate Reflector执行此操作。 System.Net和WCF库使用Systems.Diagnostics,但很少有其他人使用。 API中没有一种方法可以只为当前跟踪源插入运行时,这本来就是一个不错的功能。