使用C#在asp.net中处理请求所花费的时间

Time Taken to process a request in asp.net using C#

我想计算系统使用C_在ASP.NET中执行特定操作所花费的时间。当用户单击某个按钮以获得任何结果时,我必须显示结果以及他们获得结果所花费的时间。任何人请告诉我显示所用时间必须给出的代码。


如果您想测量某个操作需要多长时间,那么可以使用秒表对象。下面的用法示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Program
{
    static void Main()
    {
    // Create new stopwatch
    Stopwatch stopwatch = new Stopwatch();

    // Begin timing
    stopwatch.Start();

    // Do something
    for (int i = 0; i < 1000; i++)
    {
        Thread.Sleep(1);
    }

    // Stop timing
    stopwatch.Stop();

    // Write result
    Console.WriteLine("Time elapsed: {0}",
        stopwatch.Elapsed);
    }
}

因此,在您的场景中,您需要做的是在开始执行操作/方法时启动秒表,并在返回视图/完成执行之前停止它。然后,您可以使用秒表.elapsed值向用户显示它。


原始海报指定了ASP.NET。在ASP.NET中实现这一点的最简单方法可能是将类似这样的东西注入到您的global.asax中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private static ILog log = log4net.LogManager.GetLogger( typeof(Global) ) ;

void Application_BeginRequest( object sender , EventArgs e )
{
  Stopwatch timer = new Stopwatch();
  timer.Start();
  Request.RequestContext.HttpContext.Items["timer"] = timer ;
  return ;
}

void Application_EndRequest( object sender , EventArgs e )
{
  Stopwatch timer = (Stopwatch) this.Request.RequestContext.HttpContext.Items["timer"] ;
  timer.Stop() ;
  log.InfoFormat("HttpVerb={0}, URL={1}, elapsed time={2}" ,
    this.Request.RequestType ,
    this.Request.Url ,
    timer
    ) ;
  return ;
}

如果要在特定于页面的基础上执行此操作,则需要执行类似的操作,分别挂接page.preinit和page.unload事件。

在请求期间,您几乎需要使用HttpContext来保持计时器的运行状态:如果尝试使用静态变量,您将获得经典的竞争条件。