ASP.NET Pre-Compilation and Keep-Alive

asp.net

ASP.NET Pre-Compilation and Keep-Alive
1、Pre-Compilation in Whidbey

ASP.NET一大特色就是Dynamic Compilation,但是有些场合Pre-Compilation却是更好的选择,比如,你不想访问你的站点的第一个用户痴痴的等待,或者你根本不想把任何源码(包括HTML的内容)给你的用户。

Pre-Compilation在ASP.NET 2.0中支持得很彻底,你可以选择In-Place Pre-Compilation,只需要你访问一下:
http://站点名称/WebApp名称/PreCompile.axd
系统就会将WebApp里面所有的页面先给你编译一遍。

或者,更加彻底的方式,PreCompilation for Deployment,.Net Framework 2.0提供了一个命令行的工具(aspnet_compiler.exe),让你将WebApp中所有的代码、页面(包括HTML)、静态文件全部编译进dll,然后给你一个“Deployment-Ready WebApp”,No Code、No Html,呵呵,但是浏览起来和普通的WebApp没有区别。

这篇文章包含了更多的信息。

2、Pre-Compilation and Keep-Alive in .NET Framework 1.1

Whidbey毕竟是明年的事,其实在现在,我们也可以想一些办法。

Global.asax里面的那个Global类是继承自HttpApplication的,我们可以自己插入一个中间层,来做一些自己的事情。比如我们创建一个PreGlobal类,继承自HttpApplication,在PreGlobar.Init()方法中,创建一个新的线程,让这个线程遍历访问WebApp中所有的.aspx和.ascx(对ascx就LoadControl(),对aspx就HttpWebRequest.Create(url).GetResponse()),这样可以实现我们自己的“Pre-Compilation”,然后再让Global继承自我们自己的这个PreGlobal就可以了。

我们可以感觉到,如果一段时间没有访问WebApp,那么当再次访问时,速度大大降低,这是因为Clr会自动将站点的Assembly从内存中Unload,当再次访问时,再载入Assembly,而这个动作是相当耗时的(想想在电脑上运行一个WinForm,它的启动时间)。我们需要想一个办法让我们的WebApp始终Keep-Alive,这样Clr就不会将它Unload了。方法还是PreGlobal.Init()方法,我们在这个方法中创建一个Timer对象,定时时间小于默认的Session过期时间即可,在其Elapsed事件中调用一下“HttpWebRequest.Create(站点url).GetResponse()”就可以让我们的站点始终Alive了。

这个方法是从ASPAliance上看来的,具体出处已经找不到了。

3、Delphi8

D8的文章在CSDN上也渐渐多了起来。如果不讨厌Pascal的语法,那么D8安装目录的source目录下的文件实在是一个不错的学习.NET的资源,里面有D8的RTL、VCL.NET、Indy.NET、Web数据感知控件实现的源码,至少可以看看D8是如何将它的东西和.NET的东西结合起来的。

比如,在Borland.Delphi.System.pas里面,我看到了TObject = System.Object,呵呵,和我们想象的一样。在Borland.Vcl.Classes.pas里面,我看到了TList有一个private成员FList是System.Collections.ArrayList类型的,于是显然TList是通过聚合ArrayList来实现的。而在Borland.Vcl.Forms.pas里面,可以看到TForm是从TCustomForm继承下来,然后上面依次是TScrollingWinControl、TWinControl、TControl...和System.Windows.Forms.Form没什么关系,这也就是D8要分VCL.NET App和Win App的原因,VCL.NET很多控件仍然是Borland按自己的方式写的(虽然都是Managed Code写的),他们和WinForms不一定完全兼容的。

时间: 2024-10-28 17:14:18

ASP.NET Pre-Compilation and Keep-Alive的相关文章

Asp.net 4.0,首次请求目录下的文件时响应很慢

原文:Asp.net 4.0,首次请求目录下的文件时响应很慢 1. 问题起因2. 尝试过的处理思路3. 解决方法   1. 问题起因     一个从VS2003(.Net Framework 1.1)升级到.net framework 4.0的项目,每次编译或者部署到服务器上后,首次请求任何一个目录下的默认页面时,都要耗时3~5秒:而以前使用.net framework 1.1的时候,没有这个问题. 我在页面上开启Trace="true"来跟踪,发现页面的处理时间并不久(IIS重启,首

另类的[分页显示效果]?!

分页|显示 什么都不做,就是查询数据,一页显示多少条就查询多少条数据出来.这样的速度应该是很快的了吧?哈哈..思路就是,给ID值出来,使用此ID值做下一页或上一页的查询条件,并且还要排序!!在这里查询结果排序也起了很重要的作用!!!! 示例代码如下:<!--#include file="Conn.asp"--><%Dim aFlag,NowID,LastID,iShowNumiShowNum=20 '一页显示多少条记录%><!DOCTYPE HTML PU

Microsoft .NET与J2EE的比较[E]

j2ee|比较 Microsoft .NET vs. J2EE: How Do They Stack Up? What exactly is the .NET platform [and] how does the .NET architecture measure up against J2EE? Java runs on any platform with a Java VM. C# only runs in Windows for the foreseeable future. .NET

Repeater 的分页问题

问题描述 <asp:PanelID="Panel1"runat="server"Width="900px"><asp:LabelID="Label1"runat="server"Text="开始时间"style="font-size:12px;padding:0px5px0px0px;"></asp:Label><asp:Te

深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)

Microsoft 的Visual Studio为我们在应用开发中提供的强大功能,我们是有目共睹.借助该工具,是我们的开发 显得更加高效而轻松.从Microsoft把这个IDE的名字从VS.NET 该为VS(比如原来的Visual Studio.NET 2003,现在的版本叫VS2005),可以MS对该IDE的期望和野心:MS要把它改造成一个万能的IDE.不过任何都有其两面性,对于我们广大的开发者来说,VS是我们的各种行为简单化,傻瓜化:但是在另一方面,他也会蒙蔽我们的眼睛,使我们对它背后做的事

验证一个ASP.NET应用程序和页面的生命周期的实现代码_实用技巧

如果我们能更好地掌握这样一个过程,那么对单个ASP.NET Page的生命周期也能更好地了解: 下面介绍如何编写一个简单的ASP.NET 页面和一个简单的HttpModule,对MSDN里提到的ASP.NET的生命周期进行验证 1. 首先使用Visual Studio 2010建立一个空的ASP.NET网站 (ASP.NET 4.0) 2. 添加一个Default.aspx,添加三个ASP.NET控件,分别为TextBox,Button和Validator: 复制代码 代码如下: <form i

ASP.NET底层架构探索之进入.NET运行时

进入.NET运行时的真正的入口发生在一些没有被文档记载的类和接口中(译著:当然,你可以用Reflector来查看J).除了微软,很少人知道这些接口,微软的家伙们也并不热衷于谈论这些细节,他们认为这些实现细节对于使用ASP.NET开发应用的开发人员并没有什么用处. 工作进程(IIS5中是ASPNET_WP.EXE,IIS6中是W3WP.EXE)寄宿.NET运行时和ISAPI DLL,它(工作进程)通过调用COM对象的一个小的非托管接口最终将调用发送到ISAPIRuntime类的一个实例上(译注:原

ASP.NET 4.0升级至ASP.NET 4.5需要注意的地方

原以为只要在Visual Studio 2012中将每个项目的Target framework设置为.NET Framewor 4.5进行编译,然后在web.config中设置compilation的targetFramework为4.5,就升级到了ASP.NET 4.5. <compilation targetFramework="4.5"/> 后来发现这样是不够的,还需要在web.config中设置httpRuntime的targetFramework. <htt

asp.net-登陆密码错误 数据库里的用户和密码明明都是对的 怎么破怎么破 跪求大神帮助

问题描述 登陆密码错误 数据库里的用户和密码明明都是对的 怎么破怎么破 跪求大神帮助 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu