如果我错过了某个地方,很抱歉,但是如果框架自动释放了一个TraceListener,我就找不到任何文档。
如果我使用这个代码:
var traceListener = new DailyTraceListener("Logs", true);
Trace.Listeners.Add(traceListener);我是否需要手动调用traceListener.Dispose(),假设Dispose应该被调用才能正常工作?请注意,如果第二次调用Dispose (我正在试图更改它),则实现将抛出错误。
侦听器由TraceSource释放。
在这种情况下,TraceSource在哪里?是自动处理的吗?
简而言之,当程序退出时,Dispose是否保证由.NET调用?
发布于 2018-10-20 16:33:25
我自己做的测试。好像它从来就不是天生的。这是演示代码:
class Program
{
static void Main(string[] args)
{
var listener = new TestTraceListener();
Trace.Listeners.Add(listener);
Trace.WriteLine("Test");
listener.Dispose();
Trace.WriteLine("After dispose");
}
}
public class TestTraceListener : TraceListener
{
public override void Write(string message)
{
File.AppendAllText("log.log", message);
}
public override void WriteLine(string message)
{
this.Write(message + Environment.NewLine);
}
protected override void Dispose(bool disposing)
{
this.WriteLine("Dispose called");
base.Dispose(disposing);
}
~TestTraceListener()
{
this.WriteLine("Destructor called");
}
}我的文本文件是:
测试 处置叫 处置后
之后,我尝试删除Dispose调用(// listener.Dispose();),结果是:
测试 处置后
结论:如果程序自然退出,默认情况下不调用Dispose。
https://stackoverflow.com/questions/52907345
复制相似问题