《圣殿祭司的ASP.NET4.0专家技术手册》----1-12 ASP.NET程序的编译模型

简介: ASP.NET 4.0支持两种编译模型:动态编译(Dynamic Compilation)与预编译(Precompilation),让你来决定不同网站何时该用何种编译模型,不但灵活性提升,且若采用预编译网站,执行性能还可以更高。

本节书摘来自异步社区《圣殿祭司的ASP.NET4.0专家技术手册》一书中的第1章,第12节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1-12 ASP.NET程序的编译模型

圣殿祭司的ASP.NET4.0专家技术手册
ASP.NET 4.0支持两种编译模型:动态编译(Dynamic Compilation)与预编译(Precompilation),让你来决定不同网站何时该用何种编译模型,不但灵活性提升,且若采用预编译网站,执行性能还可以更高。

1-12-1 ASP.NET网站动态编译

动态编译是用户第一次浏览网站时,ASP.NET会将网站程序编译成一个dll组件文件,后续的请求就会以此组件来响应,而编译过后的网站执行性能明显较未编译网站快上许多。

范例1-6 动态编译的证明
在此,示范程序若发生变动,则动态编译模型检测到变动,就会重新进行编译,而以新的内容响应请求,请参考DynamicCompilation.aspx程序,具体步骤如下。

在Page_Load中建立一行显示消息程序:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("ASP.NET动态编译Ver 1.0");
}

执行DynamicCompilation.aspx程序,结果如图1-39所示。

在不关闭浏览器的情况下,在Visual Studio中直接修改源程序,将原先的“ver 1.0”改为“ver 2.0”,然后保存,如图1-40所示。

Response.Write("ASP.NET动态编译Ver 2.0");


72310d44960de3075e12d3d786b00963ef28900d

最后重新整理浏览器,在Refresh的一瞬间,可感觉到浏览器会稍微停顿一下,是因为系统检测到源文件有变动,故重新进行动态编译的缘故,最终界面显示最新的文字信息,如图1-41所示。


33af10a787163eb2e3f6ed4e3756328814412b3c

1-12-2 ASP.NET网站预编译

预编译(Precompile)是使用“ASPNET_Compiler.exe”命令预编译整个网站,一般来讲,它有如下的好处:

节省网页第一次编译的时间。动态编译的虽然有效加速ASP.NET网站整体性能,但许多用户或不明究里的初学者却抱怨第一次执行感觉好慢,而预编译连第一次编译的等待工作都省掉了。


94b0e3dfcb2f4f04e7fe7ea398f6faa95eefe355

(2)保护网页程序代码知识产权。动态编译可将Code-Behind程序编译进dll中,但是,若是以In-Line Code或HTML卷标开发的程序则是一点保护作用也没有;此外即便用Code-Behind模式开发Web应用程序,仍然会有许多标签曝露在.aspx中,例如,SqlDataSource连SQL命令都会显示在HTML之中。故通过预编译不但可将程序代码编译进去,甚至连.aspx网页中的HTML标签也可以一并编译,对于程序代码的保护多了一层保障。

而以下是微软对于预编译好处的说法。

(1)由于页面和程序代码文件不需在第一次要求时编译,因此用户可得到更快的响应时间,这对于经常更新的大型网站特别有用。

(2)用户浏览网页之前,识别编译时期错误的方法。

(3)不需源代码,即可建立可部署到实际执行服务器已编译网站版本的能力。

范例1-7 使用aspnet_compiler.exe预编译
那到底“ASPNET_Compiler.exe”指令该怎么用呢?例如,在IIS有一个虚拟目录网站“VS2010IDE”,在此要将它进行预编译,具体步骤如下。

在Windows的开始→Microsoft Visual Studio 2010→Visual Studio Tools下有一个“Visual Studio命令提示字符(2010)”,如图1-42所示。

执行以下预编译命令:

Aspnet_Compiler –v VS2010IDE c:\tmp\VS2010IDE -f
参数说明

“-v”是虚拟目录参数,“VS2010IDE”是虚拟目录名称,“c:tmpVS2010IDE”是指预编译后的程序文件的目的位置,「-f」是强制覆盖目标目录。

结果如图1-43所示。


cba91631fb97dc866008e531fc98fed212ada358

用资源管理器查看C:TmpVS2010IDE目录,里面只有.dll及.compiled两种类型的程序,完全看不到当初的C#源代码,如图1-44所示。


dad2548abdee81ec2bb1bcadee6865f7abcf42fd

将预编译后的VS2010IDE目录,复制到另一台正式网页服务器的C:Inetpubwwwroot目录下,再到IIS建立一个虚拟目录指向“C:InetpubwwwrootVS2010IDE”路径即可,这样就完成了网站部署。

警告 (1)aspnet_compiler.exe对于静态文件,如Web.config、文本文件、图片文件等不会
进行编译操作,而像数据库联机字符串请用aspnet_regiis.exe工具进行加密。

(2)网站预编译完成后,以后也不会触发重新动态编译,故请不要事后再加入新的.aspx
文件,那样不会有任何的作用。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
2月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
146 13
|
5月前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
107 6
|
5月前
|
Ubuntu 持续交付 API
如何使用 dotnet pack 打包 .NET 跨平台程序集?
`dotnet pack` 是 .NET Core 的 NuGet 包打包工具,用于将代码打包成 NuGet 包。通过命令 `dotnet pack` 可生成 `.nupkg` 文件。使用 `--include-symbols` 和 `--include-source` 选项可分别创建包含调试符号和源文件的包。默认情况下,`dotnet pack` 会先构建项目,可通过 `--no-build` 跳过构建。此外,还可以使用 `--output` 指定输出目录、`-c` 设置配置等。示例展示了创建类库项目并打包的过程。更多详情及命令选项,请参考官方文档。
326 11
|
4月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
201 0
|
5月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
5月前
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
|
6月前
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
|
6月前
|
开发框架 .NET 开发工具
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
|
6月前
|
开发框架 .NET 数据库连接
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
|
前端开发 JavaScript .NET
一起谈.NET技术,ASP.NET MVC2实现分页和右键菜单
  右键菜单非常方便,很多时候会用到。这篇文章将使用一个JQUERY的插件在asp.net mvc中实现右键菜单。本文还将介绍一下在asp.net mvc中如何实现简单的分页。效果如下图:   首先,下载此插件。
1020 1