在做项目的performance问题时候,为了方便跟踪各个页面的postback或者callback的花费时间,写了一个简单的httpmodule,用来打印访问花费时间。
使用的时候将下边这个类编译成一个dll,在web.config里配置好,再打开debugview就可以了。
配置
<httpModules>
<clear />
<add name="TracingModule" type="PerformanceTracing.TracingModule,PerformanceTracing"/>
.....
</httpModules>
代码
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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
}
}
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
}
}