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下的命令. 然而,批处理命令尽管功能强大,却存在不足之处.批处理命令只能 ...
随机推荐
- Tensorflow学习笔记2019.01.22
tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...
- java第三章多态
多态: 多态不仅可以减少代码量,还可以提高代码的扩展和可维护性 (通过一个方法可以对所有所需方法一个运用)多态具体表现多种形态能力的特征,同一个实现接口使用不同实例而执行不同的操作 实现多态的三个条件 ...
- 解决Jenkins用shell脚本部署后,Jenkins自动杀掉启衍生出来的守护进程
Jenkins部署java项目遇到的问题: 1.Jenkins执行构建后,需要手动执行startup.sh,站点才能正常访问 产生原因: shell脚本发布时,会衍生进程,Jenkins默认会自动杀掉 ...
- Oracle 数据库中对记录进行分页处理
学习到 oracle 的视图的时候,了解到对 Oracle 中数据的记录进行分页处理和 Mysql 提供的 limit 来进行分页处理大有不同,limit 是 mysql 中特有的关键字. 那么在 o ...
- 爬坑记-tomcat 项目启动两次的的解决
项目就启动了两次,程序倒是正常运行,关键我里边写了个while 循环,不能让它启动两次啊 百度了一下,有人说是tomcat server.xml或者tomcat新建服务的时候设置出了问题 ....最终 ...
- java多线程管理 concurrent包用法详解
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量 ...
- dskinlite(uieasy mfc界面库)使用记录1: schema验证xml
市场上的MFC第三方库很多,最终选定dskinlite企业版,成熟度比较高,当然价格也略贵. 在2017年仍然使用MFC是有些另类,但特定场景很适用,也适合不愿转型的老程序员. 目前处于学习阶段,欢迎 ...
- CSS3扫描动画效果
.swiper-animate { position: absolute; width: 100%; height: 100%; left:; top:; z-index:; background: ...
- 《笨方法学Python》加分题29
加分练习猜一猜 “if 语句” 是什么,他有什么作用.在做下一道题之前,试着用自己的话回答下面的问题: 你认为 if 对他下一行代码做了什么?为什么 if 语句的下一行需要 4 个空格缩进?如果不缩进 ...
- Json列表数据查找更新
/* 从Json数组按某个字段中查找记录 IN array 数据列表 fieldName 字段名称 fieldValue 字段值 OUT 查找到的数据列表 */ var SearchRecordsFr ...