【发布时间】:2009-08-13 00:33:37
【问题描述】:
考虑以下代码:
if (IsDebuggingEnabled) {
instance.Log(GetDetailedDebugInfo());
}
GetDetailedDebugInfo() 可能是一个昂贵的方法,所以我们只想在调试模式下调用它。
现在,更简洁的替代方法是编写如下代码:
instance.Log(() => GetDetailedDebugInfo());
.Log() 的定义如:
public void Log(Func<string> getMessage)
{
if (IsDebuggingEnabled)
{
LogInternal(getMessage.Invoke());
}
}
我关心的是性能,初步测试并没有显示第二种情况特别昂贵,但如果负载增加,我不想遇到任何意外。
哦,请不要建议条件编译,因为它不适用于这种情况。
(P.S.:我直接在 StackOverflow Ask a Question textarea 中编写了代码,所以如果有细微的错误并且无法编译,请不要怪我,你明白了 :)
【问题讨论】:
-
很容易模拟增加的负载;您可以设置一个测试用例,在紧密循环中运行这两个选项,进行数万次迭代并进行比较。
标签: c# .net performance delegates lambda