我有一个很常见的场景,即一个自实现的 ILogger 接口(interface)。它包含多个方法,如 _logger.Debug("Some stuff") 等。该实现由 LoggingService 提供,并以正常方式在类中使用。
现在我有一个关于性能的问题,我正在为 Windows Phone 7 写作,并且由于这些设备的功率有限,所以小事可能很重要。
我不想:
- 在每一行包含一个预编译器指令,例如#IF DEBUG
- 使用类似 log4net 的条件,例如_logger.DebugEnabled
在我看来,在发布版本中,我只是返回 NullLoggers,它包含一个空的接口(interface)实现,什么都不做。
问题是:编译器是否可以识别这些东西(可能很难,他无法在编译时知道我分配了哪个记录器)。有什么方法可以为 .NET 提供提示吗?
我的问题的原因,我知道输入一个空函数不会造成很大的延迟,那没问题。但是我的应用程序的源代码中有很多字符串,如果从不使用它们,那么它们就不需要成为我的应用程序的一部分......
还是我想多了一个小问题(也许“字符串 - 代码”比率在我的代码编辑器中看起来很糟糕,但它没什么大不了的)。
谢谢你的提示,
克里斯
最佳答案
[Conditional("DEBUG")]
public void Debug(string message) { /* ... */ }
对于与条件属性中的字符串不匹配的任何构建配置,编译器将删除对此方法的所有调用。请注意,此属性应用于方法,而不是调用站点。另请注意,删除的是调用站点指令,而不是方法本身。
关于c# - ILogger _logger.Debug ("Something") - 编译器有什么方法可以删除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4233880/