相关疑难解决方法(0)

C#条件记录/跟踪

我想在我的C#应用​​程序中添加日志记录或跟踪,但是如果将日志详细级别设置得太低以至于不记录消息,我不希望记录格式化字符串或计算值的开销.

在C++中,您可以使用预处理器来定义将阻止代码执行的宏,如下所示:

#define VLOG(level,expr) if (level >= g_log.verbosity) { g_log.output << expr; }
Run Code Online (Sandbox Code Playgroud)

像这样使用:

VLOG(5,"Expensive function call returns " << ExpensiveFunctionCall());
Run Code Online (Sandbox Code Playgroud)

你是怎么用C#做的?

我读过的微软文档解释了跟踪和调试设施在这里,他们声称,使用和#undef DEBUG和#undef TRACE删除所有从生产的可执行文件跟踪和调试代码,但它真的删除整个通话?意思是,如果我写的话

System.Diagnostics.Trace.WriteLineIf(g_log.verbosity>=5,ExpensiveFunctionCall());
Run Code Online (Sandbox Code Playgroud)

如果我取消定义TRACE,它不会调用我昂贵的功能吗?或者是打电话,然后决定它不会追踪任何东西?

无论如何,即使它确实删除它,这也不如C++宏,因为我无法使那个大丑陋的调用看起来像我在C++中的简单VLOG()调用,仍然可以避免评估参数,是吗?我也不能像在C++中那样在运行时定义详细程度来避免开销,对吧?

c# logging trace

8
推荐指数
2
解决办法
9164
查看次数

标签 统计

c# ×1

logging ×1

trace ×1