统计asp.net页面访问时间

在做项目的performance问题时候,为了方便跟踪各个页面的postback或者callback的花费时间,写了一个简单的httpmodule,用来打印访问花费时间。

使用的时候将下边这个类编译成一个dll,在web.config里配置好,再打开debugview就可以了。

配置

  <httpModules>
      <clear />
   <add name="TracingModule" type="PerformanceTracing.TracingModule,PerformanceTracing"/>

.....

</httpModules>

代码

 

代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Diagnostics;

namespace PerformanceTracing
{
public class TracingModule : IHttpModule
{
#region IHttpModule Members

public void Dispose()
{
}

public void Init(HttpApplication context)
{
context.BeginRequest
+= new EventHandler(context_BeginRequest);
context.EndRequest
+= new EventHandler(context_EndRequest);
}

private string getFilePath(object sender)
{
string strPath = (((HttpApplication)sender)).Request.FilePath;

if (strPath != null && strPath.EndsWith("aspx"))
{
return strPath.Substring(strPath.LastIndexOf("/"));
}

return string.Empty;
}

void context_EndRequest(object sender, EventArgs e)
{
string fileName = getFilePath(sender);
if (fileName.EndsWith("aspx"))
{
Stopwatch perfmonWatch
=
HttpContext.Current.Items[
"Stopwatch"] as Stopwatch;

if (perfmonWatch != null)
{
perfmonWatch.Stop();
string msg = "Page name: " + fileName + ". The total response time: "
+ perfmonWatch.Elapsed.TotalSeconds + "s. IsCallBack: " +
(HttpContext.Current.Request.Form[
"__CALLBACKPARAM"] != null).ToString();
Trace.Write(msg);
}
}
}

void context_BeginRequest(object sender, EventArgs e)
{
if ((((HttpApplication)sender)).Request.FilePath.EndsWith("aspx"))
{
Stopwatch perfmonWatch
= new Stopwatch();
HttpContext.Current.Items[
"Stopwatch"] = perfmonWatch;
perfmonWatch.Start();
}
}

#endregion
}
}

 

 

posted @ 2010-04-30 14:31  彷徨......  阅读(412)  评论(0编辑  收藏  举报