如何统计await方法的执行时间

How to count await method execution time

我正在做一个.net 核心项目。其中我必须计算我的 await 方法在执行时占用了多少。

[HttpPost]
public async Task<bool> InsertIntoDatabase([Frombody] StudentModel objStu) {
//For Each method and other stuff
  await DoInsert(Fiels Details);
}

我在Ajax中调用这个方法。所以在成功执行代码后,我想 return 该方法所用的时间(以分钟为单位)。

此插入过程包含 500 多条记录。所以,我有兴趣计算时间

一种方法是使用 Stopwatch

[HttpPost]
public async Task<bool> InsertIntoDatabase([Frombody] StudentModel student) 
{
    var clock = new Stopwatch();
    clock.Start();

    await DoInsert(student);

    clock.Stop();
    var minutes = clock.Elapsed.TotalMinutes();
}

Stopwatch Class

为什么不 return 在您的任务中使用时间和结果的自定义对象?

private async Task<MyClass> GetResult()
{}

public class MyClass
{
    public bool  Success { get; set; }
    public long TimeInSeconds { get; set; }
}

我强烈建议您查看 MiniProfiler。 设置起来非常简单!

  1. 通过 Nuget 安装 MiniProfiler
  2. 将 MiniProfiler 标签助手添加到您的 _Layout.cshtml
  3. 将 MiniProfiler 标签 (<mini-profiler />) 添加到您的 HTML(我也将我的添加到 Layout.cshtml)
  4. 添加到 Startup.cs 中的服务:
services.AddMiniProfiler(options =>
{
    options.RouteBasePath = "/profiler";
    options.SqlFormatter = new SqlServerFormatter();
});
  1. 调用 app.UseStaticFiles() 之后添加:
if (env.IsDevelopment())
{
     app.UseMiniProfiler();
}

现在 MiniProfiler 已准备就绪,只会出现在开发阶段(第 5 步)。要分析一些代码,请执行以下操作:

using (MiniProfiler.Current.Step("This Will be the label displayed on the front end"))
{
    //code you want to profile
}

现在 运行 您的代码,瞧! MiniProfiler 会在您的页面上放置一个非常小的 table(我认为它默认为左上角)。每行都是请求的过去(也适用于 AJAX!)。