在.NET/Visual Studio中定义TRACE常量

aqu*_*nas 41 debugging performance visual-studio

在Visual Studio 2010中,如果转到项目的属性并转到"构建"选项卡,则会出现"定义TRACE常量"复选框.这相当于做#define TRACE.

System.Diagnostics.Trace的所有方法都有[Conditional("TRACE")]它们.

我的问题是你为什么要把它关掉?我的意思是,如果你没有定义任何跟踪侦听器,那么就好像你要填满日志或其他内容.这让我觉得很奇怪.如果您正在努力调用Trace,为什么不想通过App/Web.config来控制它,而是通过编译器开关来控制它,这样就排除了重新启用它的可能性.重新编译.

我错过了什么吗?当然,它不能对性能有害,对吧?

Mat*_*dge 32

据推测,此复选框等同于/define:TRACE编译器选项.您可能希望为发布版本关闭此选项,因为您不希望最终用户出于某种原因(例如安全性)查看跟踪输出,或者提高性能.当然,性能提升将取决于它在打开时的工作量,但Conditional属性将导致编译器从生成的IL中完全删除函数调用(包括任何字符串格式化等),因此它可以有重大影响.

  • 谢谢,你是对的(由Jon Skeet在[此主题]底部的答案证实(http://bytes.com/topic/c-sharp/answers/237540-conditional-debug-if-debug)).我已经纠正了我的回答. (2认同)