Нужно ли вручную утилизировать TraceListener? - PullRequest
0 голосов
/ 20 октября 2018

Извините, если я что-то пропустил, но я не могу найти никакой документации, если TraceListener автоматически удаляется платформой.

Если я использую этот код:

        var traceListener = new DailyTraceListener("Logs", true);
        Trace.Listeners.Add(traceListener);

Нужно ли мне вручную звонить traceListener.Dispose(), предполагая, что Dispose должен быть вызван для правильной работы?Обратите внимание, что реализация выдаст ошибку, если Dispose вызывается во второй раз (я пытаюсь изменить его).

В эта статья :

Слушатели располагаются через TraceSource

Что / где в данном случае означает TraceSource?Утилизируется ли он автоматически?

Короче говоря, Dispose гарантированно будет вызываться при выходе из программы?

1 Ответ

0 голосов
/ 20 октября 2018

Я сделал тест самостоятельно.Кажется, это никогда не называется естественно.Это демонстрационный код:

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 не вызывается по умолчанию, если программа естественным образом завершается.

...