统计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
}
}