C# ILogger.Debug(";Something";)-编译器有没有办法删除它?
我得到了一个非常常见的场景,即一个自我实现的ILogger接口。它包含几种方法,如\u logger.Debug(“一些东西”)等等。该实现由LoggingService提供,并以正常方式在类中使用 现在我有一个关于性能的问题,我正在为WindowsPhone7撰写文章,由于这些设备的功率有限,一些小事情可能很重要 我不想:C# ILogger.Debug(";Something";)-编译器有没有办法删除它?,c#,performance,logging,windows-phone-7,C#,Performance,Logging,Windows Phone 7,我得到了一个非常常见的场景,即一个自我实现的ILogger接口。它包含几种方法,如\u logger.Debug(“一些东西”)等等。该实现由LoggingService提供,并以正常方式在类中使用 现在我有一个关于性能的问题,我正在为WindowsPhone7撰写文章,由于这些设备的功率有限,一些小事情可能很重要 我不想: 在每一行中包含一个预编译器指令,如#IF DEBUG 使用类似log4net的条件,例如_logger.DebugEnabled 在我看来,在发布版本中,我只返回Nul
- 在每一行中包含一个预编译器指令,如#IF DEBUG
- 使用类似log4net的条件,例如_logger.DebugEnabled
克里斯使用: 对于与条件属性中的字符串不匹配的任何生成配置,编译器将删除对此方法的所有调用。请注意,此属性应用于方法,而不是调用站点。还要注意,删除的是调用站点指令,而不是方法本身。使用:
对于与条件属性中的字符串不匹配的任何生成配置,编译器将删除对此方法的所有调用。请注意,此属性应用于方法,而不是调用站点。还请注意,删除的是调用站点指令,而不是方法本身。在应用程序中有不“运行”的日志代码可能是一个很小的问题。“null”记录器或条件的开销在方案中可能非常小。字符串将产生内存开销,这可能会让受约束的设备感到担忧,但由于它是WP7,所以最小规格实际上并没有受到约束 我知道日志代码看起来很混乱。:) 如果你真的想删除登录代码 在.Net中,可以使用标记方法进行条件编译。您可以利用此功能确保从指定生成配置的编译中删除所有日志调用。只要使用条件属性修饰的方法遵循一些规则,编译器就会从字面上去除调用链
但是,如果希望使用这种方法,则必须放弃接口设计,因为条件属性不能应用于接口成员,并且不能使用条件成员实现接口 在应用程序中有不“运行”的日志代码可能是一个很小的问题。“null”记录器或条件的开销在方案中可能非常小。字符串将产生内存开销,这可能会让受约束的设备感到担忧,但由于它是WP7,所以最小规格实际上并没有受到约束 我知道日志代码看起来很混乱。:) 如果你真的想删除登录代码 在.Net中,可以使用标记方法进行条件编译。您可以利用此功能确保从指定生成配置的编译中删除所有日志调用。只要使用条件属性修饰的方法遵循一些规则,编译器就会从字面上去除调用链
但是,如果希望使用这种方法,则必须放弃接口设计,因为条件属性不能应用于接口成员,并且不能使用条件成员实现接口 谢谢,我可能会尝试这种方法,并切换到子类化,而不是记录器的接口(反正只有两个)。但我同意,优先级很低,让我们先让应用程序运行起来,不要出错:-)谢谢,我可能会尝试这种方法,然后切换到子类化,而不是记录器的接口(反正只有两个)。但我同意,优先级很低,让我们先让应用程序运行时不出错:-)
[Conditional("DEBUG")]
public void Debug(string message) { /* ... */ }