c# - 我需要手动处理 TraceListener 吗?
问题描述
TraceListener
抱歉,如果我在某个地方错过了它,但是如果框架自动处理了a,我将找不到任何文档。
如果我使用此代码:
var traceListener = new DailyTraceListener("Logs", true);
Trace.Listeners.Add(traceListener);
我是否需要手动调用traceListener.Dispose()
,假设Dispose
应该调用它才能正常工作?请注意,如果Dispose
第二次调用该实现将引发错误(我正在尝试更改它)。
在这篇文章中:
侦听器由 TraceSource 处理
TraceSource
在这种情况下是什么/在哪里?会自动处理吗?
简而言之,Dispose
保证在程序退出时被.NET调用?
解决方案
我自己做了测试。似乎它从来没有被自然地调用过。这是演示代码:
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
如果程序自然退出,默认不调用。
推荐阅读
- java - 带有自定义登录的 Spring Security LDAP 身份验证
- c# - 未经管理员同意,为用户获取所有驱动器,包括来自站点的驱动器
- java - 即使在 HQL 查询中使用 Join Fetch,Hibernate 延迟初始化异常
- servlets - Jsp 动作表单
- python - 忽略正则表达式匹配中的换行符
- c# - 记录 CSV 数据导入
- vba - VBA用户表单数据填写
- javascript - 如何在脚本中调用脚本
- azure - Application Insights 多步骤可用性测试生成 411
- elasticsearch - elasticsearch中的内存分布