asp.net执行顺速
理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
一:简要介绍一下asp.net的执行步骤
1.IIS接收到客户请求
2. IIS把请求交给aspnet_isapi.dll处理
3.(如果是第一次运行程序)装载bin目录中的dll
4.(如果是第一次运行程序)读取各级webconfig中的配置
5.(如果是第一次运行程序)编译装载global.asax,初始化HttpApplication实例
6.创建响应请求的HttpContext
7.创建承载响应结果的HttpTextWriter
8.找到合适的HttpHandler(asp.net页面),处理http请求
9.处理session,异常
10.把处理结果反馈个客户
当HttpApplication实例创建后,
会调用InitModules()方法,
这个方法会根据webconfig文件中的配置调用相应的HttpModule
这就是可定制的HttpModule
二:通过定制HttpModule来计算页面执行时间
当HttpApplication创建HttpModule时
将会执行HttpModule的Init方法
在这个方法中,可以订阅多个事件
如下:
BeginRequest
AuthenticateRequest 当安全模块已建立用户标识时发生。
PostAuthenticateRequest
AuthorizeRequest 当安全模块已验证用户授权时发生。
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireRequestState
PreRequestHandlerExecute
PostRequestHandlerExecute
ReleaseRequestState
PostReleaseRequestState
EndRequest
这些事件也是HttpApplication处理管线中的各种事件
常用的就是BeginRequest和EndRequest
下面我们做一个例子来实现计算页面的执行时间
先看webconfig的代码
<?xmlversionxmlversionxmlversionxmlversion="1.0"?>
<configuration>
<system.web>
<httpModules>
<add name="MyModule"type="xland.MyModule"/>
</httpModules>
</system.web>
</configuration>
xland是我创建的一个类库,命名空间为xland
MyModule为该类库下的一个类实现了IHttpModules接口
下面看这个类的代码:
using System;
usingSystem.Collections.Generic;
usingSystem.Web;//引用web命名空间
using System.Text;
namespace xland
{
public classMyModule:IHttpModule//继承IHttpModules
{
public void Init(HttpApplicationapplication)//实现IHttpModules中的Init事件
{
//订阅两个事件
application.BeginRequest +=newEventHandler(application_BeginRequest);
application.EndRequest+=newEventHandler(application_EndRequest);
}
private DateTimestarttime;
private void application_BeginRequest(object sender, EventArgse)
{
//objectsender是BeginRequest传递过来的对象
//里面存储的就是HttpApplication实例
//HttpApplication实例里包含HttpContext属性
starttime = DateTime.Now;
HttpApplication application =(HttpApplication)sender;
HttpContext context =application.Context;
context.Response.Write("开始计时,现在的时间为:" +starttime.ToString("yyyy年MM月dd日HH:mm:ss.fff") +"<br>");
}
private void application_EndRequest(object sender, EventArgse)
{
DateTime endtime =DateTime.Now;
HttpApplication application =(HttpApplication)sender;
HttpContext context =application.Context;
context.Response.Write("计时结束,现在的时间为:" +endtime.ToString("yyyy年MM月dd日HH:mm:ss.fff") +"<br>");
context.Response.Write("页面执行时间:" + (endtime -starttime).ToString());
}
//必须实现dispose接口
public void Dispose() { }
}
}
好其他的都不用管,我们在default.aspx中做一些耗时的操作
注意在web应用程序类库中一定要添加xland的引用
using System;
using System.Collections;
usingSystem.Configuration;
using System.Data;
using System.Web;
usingSystem.Web.Security;
using System.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
namespace _1
{
publicpartial class _Default :System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgse)
{
for (int i = 1; i < 10000;i++)
{
Response.Write(i);
if (i % 100 == 0) {Response.Write("<br>");}
}
}
}
}
BeginRequest和EndRequest里可以做很多事情
比如处理cookie的domain等
等具体需要的时候要能想到这里来
asp.net执行顺速的更多相关文章
- asp.net执行SqlServer存储过程!(详解!)
ASP.NET执行存储过程 一. 执行一个没有参数的存储过程的代码如下: connectionString为连接字符串 SqlConnection conn=new SqlConnection(con ...
- ASP.NET执行模型之IIS服务器处理流程
之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解. 本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过 ...
- IIS 内部运行机制及Asp.Net执行过程详解
一直以来对一个Asp.net页面穿过IIS后就返回给浏览器一个HTML页面感觉很是神奇.虽然做技术这么长时间了,也曾经大致了解过一点来龙去脉,但是如果你真的问起我比较详细的过程,我还真的回答不上来,好 ...
- ASP.NET执行循序
首先第一次运行一个应用程序(WebSite或者WebApplication都是Web应用程序)第一次请求 -> 1,IIS -> 2,aspnet_isapi(非托管dll) -> ...
- 关于asp.net执行exe程序时权限不够的解决办法(2015.04.17更新)
一,本文背景 长话短说:asp.net项目中需要用到PDF转换成SWF文件,用户上传后自动调用pdf2swf.exe转换. 但有个问题,执行时权限不够,导致一直报错(滚动条一直在往下滚,刷屏中),见下 ...
- ASP.net绑定文本框Enter事件到按钮 ASP.NET执行后台执行JS方法
txtAccountBarcode.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if (( ...
- C#和asp.net执行外部EXE程序
这两天研究下.Net的执行外部EXE程序问题,就是在一个程序里通过按钮或其他操作运行起来另外一个程序,需要传入参数,如用户名.密码之类(实际上很类似单点登录,不过要简单的多的多):总结如下: 1.CS ...
- asp.net执行cmd命令(包括第三方应用的命令行)
Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = ...
- ASP.NET执行cmd命令
批处理命令,是执行速度最快效益最高的命令.因为批处理命令,说白了,就是ms-dos环境下的命令,有很多的批处理命令,都是纯DOS下的命令. 然而,批处理命令尽管功能强大,却存在不足之处.批处理命令只能 ...
随机推荐
- fail-fast和fail-safe的区别
fail-fast(快速失败):多线程情况下,一个线程通过迭代器读取集合中的值时,另一个线程修改了集合,则会抛出ConcurrentModificationException异常: 集合中通过modC ...
- rror: too many values to unpack
方法返回值
- 【Spring源码解析】—— 依赖注入结合SpringMVC Demo-xml配置理解
在IOC容器初始化的梳理之后,对依赖注入做一个总结,就是bean实例化的过程,bean的定义有两种方式,一种是xml文件配置,一种是注解,这里是对xml配置文件的依赖注入的介绍,后续对bean与该部分 ...
- git master 回滚代码
回退到指定版本 f6a3d430 (为commit id 前8位) git reset --hard f6a3d430 强制推送到远程分支 git push origin HEAD --force 但 ...
- Centos7 安装可视化图形
因为安装的Centos7最小安装包,虚拟机没有可视化界面,可以采用下列命令,安装可视化界面. init id::initdefault: yum install -y libdevmapper* yu ...
- MySQL:缓存算什么东西?!
原创: 码农翻身刘欣 十年前,我们还是一个企业内部的应用,用户不多,数据也不多. Tomcat一天也处理不了多少请求,闲得无聊的时候只能和我聊天,这是没有办法的事情,因为整个系统只有我们两个: 没错, ...
- jQuery.validate.js 自定义错误信息
var validate = $("form").validate({....})validate.showError({"username":"us ...
- 配置GitHub的SSH key
配置GitHub的SSH key 生成密钥对 打开git bash工具(Windows环境),Linux则直接打开命令行,执行下面的命令生成密钥文件 ssh-Keygen -t rsa -C &quo ...
- openstack快速复制一台云主机系统
1.先把目标主机创建快照,目标机器会关机 2.创建主机 3.设置网络和ip: 当我ifconfig eth0的时候出现如下错误:eth0: error fetching interface infor ...
- Object.defineProperty(obj,prop,descriptor)使用
初步实现了数据自动映射到html中,动态修改对象数据也很自动更新到html.提供addProps方法-添加新增属性并初始化自动监听代码如下: 1.abserve.js:包含数据监听实现.类似jquer ...