gpt4 book ai didi

c# - 是否应使用 "if"语句保护 TraceSource?

转载 作者:行者123 更新时间:2023-11-30 20:49:35 26 4
gpt4 key购买 nike

在跟踪到 TraceSource 之前,是否应该在发出跟踪本身之前检查“跟踪级别”?

var ts = new TraceSource("foo");
ts.Switch.Level = SourceLevels.Warning;
if (/* should there be a guard here? and if so, what? */) {
ts.TraceEvent(TraceEventType.Warning, 0, "bar");
}

虽然有SourceSwitch.ShouldTrace(TraceEventType) ,文档表明

Application code should not call this method; it is intended to be called only by methods in the TraceSource class.

似乎 TraceSource 之前的模型使用了 TraceSwitch (不是 SourceSwitch)类,它有各种 TraceXYZ 方法(为此目的?),但 TraceSource 模型似乎不需要/不使用/提及这些方法。

(将守卫放在跟踪方法之外会影响调用中/用于调用的表达式的评估 - 当然,副作用或计算量大的操作是“糟糕的”和“不明智的” ,但我仍然想关注主要问题。)

最佳答案

根据昂贵的跟踪参数计算,我得出以下结论:

internal sealed class LazyToString
{
private readonly Func<object> valueGetter;

public LazyToString(Func<object> valueGetter)
{
this.valueGetter = valueGetter;
}

public override string ToString()
{
return this.valueGetter().ToString();
}
}

用法是

traceSource.TraceEvent(TraceEventType.Verbose, 0, "output: {0}", new LazyToString(() =>
{
// code here would be executed only when needed by TraceSource
// so it can contain some expensive computations
return "1";
}));

有更好的主意吗?

关于c# - 是否应使用 "if"语句保护 TraceSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com