【发布时间】:2020-09-25 23:10:55
【问题描述】:
我正在尝试跟踪引用的 .NET 核心应用程序和库的指标。指标,例如:延迟、吞吐量、计数、大小等。
例如,假设我正在实施延迟度量,我将必须围绕我想要计算延迟的每个方法如下:
var sw = Stopwatch.StartNew();
var result = MyFunction(input1, input2, input3);
sw.Stop();
// set latency out
latency = sw.ElapsedMilliseconds;
return result;
我想看看 C# 中是否有更简洁的方法。我想过传递一个委托方法并定义一个这样的函数以避免Stopwatch.StartNew()和sw.Stop()的重复
public static TResult CollectLatency<T, U, V,TResult>(Func<T, U, V, TResult> func, out long latency, T input1, U input2, V input3)
{
var sw = Stopwatch.StartNew();
var result = func(input1, input2, input3);
sw.Stop();
// set latency out
latency = sw.ElapsedMilliseconds;
return result;
}
但是我将不得不根据我想要测量延迟的所有方法来定义具有不同输入数量的此方法的重载。
我想到的一个解决方案是只有一个输入,并且让我所有要测量的方法只采用一个参数(包括所有参数的类引用类型)。但是,这不是一种选择,因为这些方法存在现有的外部消费者,并且会在升级过程中破坏它们。
我可以探索其他解决方案吗?
【问题讨论】: