【发布时间】:2020-01-13 23:08:06
【问题描述】:
我有一个 C#(dotnet 核心)应用程序,它从队列中获取输入并对其进行处理。处理时间由许多因素决定。其中之一是请求本身。
我的代码如下所示:
public static void main()
{
DoWork(new TaskInformation("abc"));
}
public static void DoWork(TaskInformation input)
{
InnerWork1(input);
InnerWork2(input);
}
private static void InnerWork1(TaskInformation input)
{
// Running code here.
Thread.Sleep(1000);
}
private static void InnerWork2(TaskInformation input)
{
// Running code here.
Thread.Sleep(2000);
}
为了提高我的应用程序的性能,我想开发一个可以运行并测量执行时间的小工具。如果时间超过某个阈值 - 它会做一些事情。
所以,我想做的是用Stopwatch 自动“包装”我的内部函数(InnerWork1\2) - 无需以编程方式进行。
我将打开此分析功能的方式应该是这样的:
public static void main()
{
RunWithProfiling(DoWork, new TaskInformation("abc"));
}
因此,在这种情况下,预期的分析结果将是:
DoWork - took 3 seconds
InnerWork1 - took 1 second
InnerWork2 - took 2 second
问题:
- 问题是是否有可能实现这样的机制?也许有反射?
- 这是否可以从代码中运行 C# 分析器?诸如“代码将自行分析”之类的内容。
【问题讨论】:
-
查看 BenchmarkDotNet:github.com/dotnet/BenchmarkDotNet