ILogger _logger.Debug("Something") - 编译器有什么方法可以删除它?

Chr*_*ert 1 c# performance logging windows-phone-7

我有一个非常常见的场景,即自我实现的ILogger接口.它包含几个方法,如_logger.Debug("Some stuff")等.该实现由LoggingService提供,并以正常方式在类中使用.

现在我有一个关于性能的问题,我正在为Windows Phone 7写作,而且由于这些设备的功能有限,所以很少有事情可能很重要.

我不想:

  • 在每行上包含一个预编译器指令,如#IF DEBUG
  • 使用像log4net这样的条件,例如_logger.DebugEnabled

我看到它的方式,在发布版本中,我只返回NullLoggers,它包含一个空接口的实现,什么都不做.

问题是:编译器是否识别出这样的事情(可能很难,他在编译时无法知道我分配的记录器).有什么方法可以给.NET提示吗?

我的问题的原因,我知道进入一个空函数不会造成很大的延迟,没有问题.但是我的应用程序的源代码中有很多字符串,如果它们从未使用过,它们实际上并不需要成为我的应用程序的一部分......

或者我是否过度思考一个小问题(也许"字符串 - 代码"比率在我的代码编辑器中看起来很糟糕,而且无论如何都没什么大不了的)

谢谢你的提示,
克里斯

And*_*are 9

使用条件属性:

[Conditional("DEBUG")]
public void Debug(string message) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

对于与条件属性中的字符串不匹配的任何构建配置,编译器将删除对此方法的所有调用.请注意,此属性适用于方法而不是调用站点.另请注意,删除的是调用站点指令,而不是方法本身.