TraceSource类的MSDN文档中有一个示例,说明app.config文件如何列出TraceSource实例的信息:
http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx
但是,没有关于TraceSource值存储位置的信息......现有的TraceSource对象存储在哪里?什么时候(编辑:它们意味着配置的实例)构建?在创建TraceSource对象时,TraceSource对象如何知道如何返回命名实例(编辑:应该配置实例)而不是新实例?我可以在不使用Reflection的情况下找到现有TraceSource对象的列表吗?
答案 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中没有一种方法可以只为当前跟踪源插入运行时,这本来就是一个不错的功能。