首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要手动释放TraceListener吗?

我需要手动释放TraceListener吗?
EN

Stack Overflow用户
提问于 2018-10-20 15:40:03
回答 1查看 141关注 0票数 1

如果我错过了某个地方,很抱歉,但是如果框架自动释放了一个TraceListener,我就找不到任何文档。

如果我使用这个代码:

代码语言:javascript
复制
        var traceListener = new DailyTraceListener("Logs", true);
        Trace.Listeners.Add(traceListener);

我是否需要手动调用traceListener.Dispose(),假设Dispose应该被调用才能正常工作?请注意,如果第二次调用Dispose (我正在试图更改它),则实现将抛出错误。

this article

侦听器由TraceSource释放。

在这种情况下,TraceSource在哪里?是自动处理的吗?

简而言之,当程序退出时,Dispose是否保证由.NET调用?

EN

回答 1

Stack Overflow用户

发布于 2018-10-20 16:33:25

我自己做的测试。好像它从来就不是天生的。这是演示代码:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52907345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档