TraceSource类的MSDN文档有一个示例,说明app.config文件如何列出TraceSource实例的信息:
http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx
但是,没有关于TraceSource值在哪里存储的信息-- stored...where是否存储了现有的TraceSource对象?什么时候构造它们(编辑:它们意味着已配置的实例)?TraceSource对象如何知道在创建TraceSource对象时如何返回命名实例(编辑:应该配置实例)而不是新实例?可以在不使用反射的情况下找到现有TraceSource对象的列表吗?
发布于 2012-12-13 23:07:01
TraceSource类保存了一个私有的源列表。但是,除了TraceSource类本身之外,任何人都无法访问它。
.config文件部分用于为跟踪源配置侦听器。因此,在代码中创建TraceSource时,它使用在构造函数中传递的名称,然后查看.config文件,以查看应该自动添加或删除哪些侦听器。
因此,代码创建一个源,.config文件对其进行配置。相反,.config文件不能创建源。
发布于 2012-12-13 23:07:11
存储的TraceSource对象?
在静态集合中(因此每个应用程序域都有一个副本),但是在.NET版本中,它们被存储在弱引用中,如果创建了太多的引用,就会导致内存泄漏。如果我没记错的话,单一版本没有这个问题。
要了解更多细节,我建议阅读源代码-- Mono源代码更容易找到,因为它们是正式开放的。
它们是什么时候建造的?
当正在编写跟踪的应用程序写入TraceSource源代码=新的TraceSource()时;
TraceSource对象如何知道如何在创建TraceSource对象时返回命名实例而不是新实例?
不确定。
可以在不使用反射的情况下找到现有TraceSource对象的列表吗?
过去可以用RedGate反射器来完成这个任务。System.Net和WCF库使用Systems.Diagnostics,但很少有其他库使用。API中没有一种方法只对当前跟踪源的运行时进行交互,这将是一个很好的特性。
https://stackoverflow.com/questions/13868782
复制相似问题