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

C# 使用C在asp.net中处理请求所花费的时间#,c#,asp.net,C#,Asp.net,我想计算系统使用C#在asp.net中执行特定操作所花费的时间。当用户点击按钮获得任何结果时,我必须显示结果以及他们获得结果所花费的时间。任何人请告诉我显示所用时间所需的代码。如果你想测量某项操作所需的时间,那么你可以使用秒表对象。下面的用法示例: class Program { static void Main() { // Create new stopwatch Stopwatch stopwatch = new Stopwatch(); // B

我想计算系统使用C#在asp.net中执行特定操作所花费的时间。当用户点击按钮获得任何结果时,我必须显示结果以及他们获得结果所花费的时间。任何人请告诉我显示所用时间所需的代码。

如果你想测量某项操作所需的时间,那么你可以使用秒表对象。下面的用法示例:

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);
    }
}
类程序
{
静态void Main()
{
//创建新秒表
秒表秒表=新秒表();
//开始计时
秒表。开始();
//做点什么
对于(int i=0;i<1000;i++)
{
睡眠(1);
}
//停止计时
秒表;
//写入结果
WriteLine(“经过的时间:{0}”),
秒表(已过);
}
}

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

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

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);
    }
}
类程序
{
静态void Main()
{
//创建新秒表
秒表秒表=新秒表();
//开始计时
秒表。开始();
//做点什么
对于(int i=0;i<1000;i++)
{
睡眠(1);
}
//停止计时
秒表;
//写入结果
WriteLine(“经过的时间:{0}”),
秒表(已过);
}
}

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

原始海报指定了ASP.Net。在ASP.Net中执行此操作的最简单方法可能是将类似的内容注入到您的
global.asax

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
在请求期间保持计时器:如果您尝试使用静态变量,您将获得经典的竞速条件。

原始海报指定了ASP.Net。在ASP.Net中执行此操作的最简单方法可能是将类似的内容注入到您的
global.asax

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
在请求期间保持计时器:如果您尝试使用静态变量,您将拥有经典的竞争条件。

您是指服务器端(即ASP.Net代码内)所用的时间吗?或者你指的是用户体验到的时间?后者将高度依赖于网络延迟等,而不是ASP.Net后端代码。我需要计算服务器端花费的时间。您是指服务器端花费的时间(即在ASP.Net代码内)?或者你指的是用户体验到的时间?后者将高度依赖于网络延迟等,而不是ASP.Net后端代码。我需要计算服务器端花费的时间。+1。请注意,此处显示的秒表的基本用法只会测量实际操作所用的时间,而忽略服务器端的所有基础结构代码以及所有网络时间/JavaScript时间-因此将始终少于用户观察的时间。我完全同意Alexei。+1。请注意,此处显示的秒表的基本用法只会测量实际操作所用的时间,而忽略服务器端的所有基础结构代码以及所有网络时间/JavaScript时间-因此将始终少于用户观察的时间。我完全同意Alexei。此答案中提供的代码不能保证正常工作。秒表实例必须由启动它的线程停止,ASP.NET运行时可能会在BeginRequest和EndRequest方法之间跳转线程。这可能会导致记录不正确的值。通常,ASP.Net请求由单个工作线程处理。线程可能被更改的唯一上下文是,如果您正在使用异步操作,这可能会导致请求的工作线程被切换。(请参见和)。ASP.NET请求处理可以(而且经常如此!)跳转线程。请记住:IIS和ASP.NET都有代码在应用程序的BeginRequest和EndRequest事件之间运行,并且这些代码不能保证同步执行。这些事件中的IIS或ASP.NET代码可能导致线程跳转。有关更多信息,请参阅。此答案中提供的代码不能保证正常工作。秒表实例必须由启动它的线程停止,ASP.NET运行时可能会在BeginRequest和EndRequest方法之间跳转线程。这可能会导致记录不正确的值。通常,ASP.Net请求由单个工作线程处理。线程可能被更改的唯一上下文是,如果您正在使用异步操作,这可能会导致请求的工作线程被切换。(请参见和)。ASP.NET请求处理可以(而且经常如此!)跳转线程。请记住:IIS和ASP.NET都有代码在应用程序的BeginRequest和EndRequest事件之间运行,并且这些代码不能保证同步执行。这些事件中的IIS或ASP.NET代码可能导致线程跳转。有关更多信息,请参阅。