`
fastwind
  • 浏览: 325152 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

ASP.NET应用程序设计的10大技巧

阅读更多

在本篇文章中,我们将讨论编程人员在使用ASP.NET开发应用程序时需要注意的10个技巧,这些技巧涉及从缺省的控件、表单名的改变到StringBuilder类的使用,有助于编程人员能够尽快地适应.NET环境。

  1、在使用Visual Studio .NET时,除直接或非引用的对象外,不要使用缺省的名字

  .NET带来的好处之一是所有的源代码和配置文件都是纯文本文件,能够使用Notepad或WordPad等任意的文本编辑器进行编辑。如果不愿意,我们并非一定要使用Visual Studio .NET作为集成开发环境。但使用了Visual Studio .NET,我们可以在Windows文件管理器中看到文件,或在Visual Studio .NET之外从文本编辑器中浏览文件的内容。
  使用Visual Studio .NET作为集成开发环境有许多好处,其中最显著的好处是它极大地提高了生产效率。使用Visual Studio. NET,我们能够在付出较小代价的情况下更快地开发软件。作为集成开发环境一部分的IntelliSense提供自动的代码完成、在输入方法或函数时提供动态帮助、语法错误的实时提示,以及其他能够提高生产效率的功能。

  象其他复杂的工具那样,在学会如何充分发挥它的作用和掌握其“习性”前,Visual Studio .NET也会使我们产生一种挫折感。有时,它象一个难以了解的黑盒子,会生成大量的文件和许多无用的代码。

  Visual Studio .NET的一个功能是,无论是类、控件或表单中的对象,它都能够为新对象提供缺省名字。例如,如果我们创建了一个新的ASP.NET Web Application,其缺省的名字将是WebApplication1。我们可以在“新工程”对话框中方便地改变该应用的名字,但同时改变的只是该应用程序的名字空间的名字及其所在的虚拟目录,源代码文件的缺省名字仍然是WebForm1.aspx和WebForm1.aspx.cs(C#工程)或WebForm1.aspx.vb(VB.NET工程)。

  我们可以在方案浏览器中改变ASPX和代码使用的文件名字,但Web页类的名字仍然将是WebForm1。如果在该Web表单上生成一个按钮,其缺省的名字将是Button1。事实上,所有控件的名字都是由控件的类型和数字组成的。

  我们能够,也应该将应用程序中所有的表单和控件的名字都修改成有意义的名字。对于较小的演示性程序而言,缺省的名字还能够胜任,但如果应用程序由多个表单,每个表单上有许多按钮和标签时,象frmStartup、frmDataEntry和frmReports这样的表单名就比Form1、Form2和Form3这样的名字更易于理解和维护。

  如果表单上控件要在代码的其他地方引用,使它有一个有意义的名字就更重要了。btnOK、btnCancel和btnPrint这样的名字使看代码的人更容易理解,因而,也比名字为Button1、Button2、Button3这样的控件更容易维护。

  修改一个工程中所有文件中出现的一个名字的一个好方法是,在Visual Studio .NET菜单中依次选择“编辑”->“发现和替换”->“替换”命令。

  在看二周前编写的代码时,我们经常就象第一次见到这些代码一样,因此使它们有一个有助于我们理解其含义的名字是十分有必要的。

2、即使不使用Visual Studio .NET进行编程,使用代码支持文件也有利于提高应用程序的性能

  在Web应用程序、Web服务或Web控件等所有的ASP.NET Web工程中,Visual Studio .NET都使用代码支持文件。代码支持文件使工程具有更好的组织、模块性,更适合多人组成的开发团队。另外,它还会带来性能的提高。

  代码支持文件的内容被编译成一个组合文件中的类,一般是一个DLL文件,有时也可以是EXE文件。该文件驻留在应用程序的组合体高速缓冲区中,在应用程序启动时,可以立即得到它。

  如果代码是包含在<script>标记中或ASPX文件代码中,它仍然会被编译成一个Web页类。在这种情况下,每当该网页在应用程序对话中第一次加载时,都需要重新进行编译,被编译的类就会驻留在内存中。每当计算机启动、IIS停止、重新启动或者源代码、配置文件改变时,该文件必须重新编译。尽管不大,但这样引起的性能损耗也是相当可观的。

  3、尽量减少表单回送

  每当点击Web网页上的Button、LinkButton或ImageButton控件时,表单就会被发送到服务器上。如果控件的AutoPostBack属性被设置为true,如果CheckBox、CheckBoxList等控件的状态被改变后,也会使表单会发送回服务器。

  每次当表单被发送回服务器,就会被重新加载,启动Page_Load事件,执行Page_Load事件处理程序中的所有代码。把网页的初始化代码放在这里是最合适不过的了。我们经常会希望在每次加载网页时执行一些代码,而希望只有在网页第一次加载时执行另一些代码,甚至希望一些代码在除首次加载外的每次加载时执行。

  可以利用IsPostBack特性来完成这一功能。在网页第一次加载时,该属性的值是false。如果网页因回送而被重新加载,IsPostBack属性的值就会被设置为true。通过测试,可以在任意时候执行指定的代码。下面是相关的C#代码:


protected void Page_Load(Object sender, EventArgs e)
{
// 网页每次加载时,执行的一些操作
if (!IsPostBack)
{
// 网页第一次加载时执行的操作
}
else
{
// 回送时执行的操作
}

// 网页每次加载时执行的操作
}



  我们希望尽量不引起回送(每次回送都会要求服务器进行一系列的操作),即使引起回送后。也希望能够执行尽量少的操作。大规模、浪费时间的操作(例如数据库查找)尤其应当避免,因为它们能够延长应用程序的响应时间。

  4、使用StringBuilder类

  字符串在.NET框架中是不可变的,这意味着改变字符串的操作符和方法会返回字符串的改变后的拷贝,这意味着性能还有提高的空间。当进行大量的字符串操作时,使用StringBuilder类就是一种比较好的选择了。

  下面的C#代码测试用二种方式从10000个子字符串中生成字符串所需要的时间。第一次使用了一个简单的字符串串联操作;第二次使用了StringBuilder类。要想查看结果字符串,可以去掉下面的代码中注解行的注解符号:

<%@ Page Language="C#" %>

<script runat="server">
void Page_Load(Object Source, EventArgs E)
{
int intLimit = 10000;
DateTime startTime;
DateTime endTime;
TimeSpan elapsedTime;
string strSub;
string strWhole = "";

// 首先执行字符串连接操作
startTime = DateTime.Now;
for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
strWhole = strWhole + " " + strSub;
}
endTime = DateTime.Now;
elapsedTime = endTime - startTime;
lblConcat.Text = elapsedTime.ToString();
// lblConcatString.Text = strWhole;

// 使用stringBuilder类进行同样的操作
startTime = DateTime.Now;
StringBuilder sb = new StringBuilder();
for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
sb.Append(" ");
sb.Append(strSub);
}
endTime = DateTime.Now;
elapsedTime = endTime - startTime;
lblBuild.Text = elapsedTime.ToString();
// lblBuildString.Text = sb.ToString();
}

</script>

<html>
<body>
<form runat="server">

<h1>String Concatenation Benchmark</h1>

Concatenation:
<asp:Label
id="lblConcat"
runat="server"/>

<br/>

<asp:Label
id="lblConcatString"
runat="server"/>

<br/>
<br/>

StringBuilder:
<asp:Label
id="lblBuild"
runat="server"/>

<br/>

<asp:Label
id="lblBuildString"
runat="server"/>

</form>
</body>
</html>




  二种方式的差别是相当大的:使用StringBuilder类的Append方法的速度比使用字符串连接的速度快近200倍。

5、只在必要时使用服务器端控件


  ASP.NET中新引入了一种在服务器端运行的被称作Web Server Controls的控件,在代码中,它们经常通过下面的语法被说明:

<asp:TextBox id="txtLastName" size="40" runat="server" />


  它们有时也被称作ASP控件。服务器端控件是由runat属性指示的,它的值总是“server”。
通过添加runat属性,一般的HTML控件可以被很方便地转换到服务器端运行,下面是一个简单的例子:

<input type="text" id="txtLastName" size="40" runat="server" />


  可以通过id属性中指定的名字,我们可以引用程序中的控件,可以通过编程的方式设置属性和获得值,因此,服务器端处理方式有较大的灵活性。

  这种灵活性是有一定代价的。每种服务器端控件都会消耗服务器上的资源。另外,除非控件、网页或应用程序明确地禁止view state,控件的状态是包含在view state的隐藏域中,并在每次回送中都会被传递,这会引起严重的性能下降。

  在这方面的一个很好的例子是,网页上控件表格的应用,如果不需要在代码中引用表格中的元素,则使用无需进行服务器端处理的HTML表格。我们仍然可以在HTML表格单元中放置服务器控件,并在代码中引用服务器控件。如果需要引用任意的表格元素,例如指定的单元,则整个表格必须是服务器控件。

  6. HyperLink控件、LinkButton控件的差别

  对于Web访问者而言,HyperLink、LinkButton控件是一样的,但它们在功能方面仍然有较大的差异。
当用户点击控件时,HyperLink控件会立即将用户“导航”到目标URL,表件不会回送到服务器上。 LinkButton控件则首先将表件发回到服务器,然后将用户导航到目标URL。如果在“到达”目标URL之前需要进行服务器端处理,则使用LinkButton控件;如果无需进行服务器端处理,则可以使用HyperLink控件。

  7、注释代码

  这一技巧并不是针对ASP.NET的,但它是一个良好的编程习惯。

  注释不仅仅应当说明代码会执行什么操作,还应当注明原因。例如,不要仅仅在注释中说明是在遍历数组,而是要说明遍历数组是根据某一算法计算一个值,除非算法是相当简单的,否则还应当对算法进行简要的说明。

  .NET工程中的不同的编程语言都有各自不同的注释符号,下面是一个简要的说明:


HTML <!-- 注释 -->
JavaScript // 注释
VBScript ' 注释
VB.NET ' 注释
C# // 注释
/* 多行内容
的注释
*/
SQL -- 注释


  在服务器控件的开始和结束标记中没有注释符号,但服务器能够忽略掉所有它不能识别的属性,因此我们能够通过使用没有定义的属性来插入注释。下面是一个例子:

<asp:TextBox id="txtLastName" size="40" comment="这是我的注释" runat="server" />


  在Visual Studio .NET中对源代码进行注释非常简单。高亮度显示需要注释的行,然后按Ctrl+K+C组合键添加注释。要删除注释,只需高亮度显示被注释的代码,并按下Ctrl+K+U组合键。

  在C#工程中,我们还可以通过在每行的开始处使用///输入XML注释小节。在注释小节中,我们可以使用下面的XML标记组织注释:


<summary></summary>
<remarks></remarks >
<param></param>
<returns></returns>
<newpara></newpara>


  要在Visual Studio .NET中查看这些XML注释的格式化的报告,我们可以首先选择“工具”菜单项,然后选择“建立注释Web网页”菜单项。

8、使用trace方法和trace属性记录Page目录中网页的执行情况

  调试程序的一种古老的技术是在程序中的关健点插入输出语句,通常情况下,输出信息中会包含重要变量的值,相关信息可以输出到屏幕、日志文件或者数据库。

  在ASP.NET中,通过使用Page命令中的trace属性,这种调试技术的使用更简单了。Page命令是ASPX文件开始处的一行代码,它提供编译器的指示。Page命令中包含一个或多个属性,向编译器提供使用的编程语言、代码支持文件的位置或要继承的类的名字等信息。

  Page命令中的属性之一是trace,其值可能是true或false,下面是一个典型的Page命令,其中的trace属性的值是true:


<%@ Page language="c#" trace="true" %>


  如果trace属性的值设置为true,由ASPX文件生成的Web页就会显示出来,除了网页本身外,关于该页的大量其他信息也会显示出来。这些信息以下面小节的形式显示在一张表格中:

  ·Request细节 提供Session ID、请求时间和请求的状态码。
  ·Trace Information 包含跟踪日志、网页生命周期中按时间先后顺序各个步骤的列表。另外,也可以向其中添加定制信息。
  ·控件树 以一种分层次的方式列出网页上的所有控件,包括每个控件以字节计算的大小。
  ·Cookies集合 列出该网页创建的所有Cookie。
  ·头部集合 HTTP头部以及它们的值。
  ·Server变量 与该网页相关的Server环境变量。

  包含在Trace Information小节中的跟踪日志是最有用的,在这里我们可以插入自己的跟踪命令。trace类中有2个方法能够在跟踪日志中插入命令:Trace.Write和Trace.Warn,除了Trace.Warn命令用红色字体显示、Trace.Write命令用黑色字体显示外,它们是相同的。下面是跟踪日志的一个屏幕快照,其中包含有几个Trace.Warn命令。

  跟踪日志中最方便的功能是我们可以在开发和测试过程中在整个代码中插入Trace.Write和Trace.Warn语句,而在最终交付应用程序时,可以通过改变Page命令中trace属性的值,禁止这些命令起作用,而无需在部署应用软件前删除这些输出语句。

  9、使用存储过程

  微软公司的SQL Server和其他现代关系数据库都使用SQL命令定义和处理查询。一个SQL语句或一系列SQL语句提交给SQL Server,SQL Server会对命令进行解析,然后创建一个查询计划并对它进行优化,然后执行该查询计划,这都需要大量的时间。

  存储过程是一系列被查询处理器预解析和优化的SQL命令,这些命令会被存储起来,可以得到快速地执行。存储过程也被称作sprocs,它可以接收输入参数,使一个单一的存储过程能够处理较大范围的特定的查询。

  因为sprocs是预先被解析的,对于复杂的查询更显得重要,其查询计划是预先优化的,因此调用查询过程比执行相同功能的SQL语句速度要快得多。

  10、使用.NET命令行

  .NET命令行工具在命令提示符窗口中运行。为了使命令能够执行,它必须驻留在命令提示符的当前目录中,或通过设置PATH环境变量。

  .NET SDK在“启动”菜单上安装一个菜单项,该菜单项能够打开一个正确设置了PATH环境变量的命令提示符窗口。我们可以通过依次点击“开始”->“程序”->“Microsoft Visual Studio .NET”->“Visual Studio .NET工具”->“Visual Studio .NET命令提示符”,启动命令提示符窗口。

  通过在将该菜单项从菜单上拖到桌面上时,同时按Ctrl+C键,就可以将该菜单项的快捷方式拷贝到桌面上,使用起来会非常方便。

分享到:
评论

相关推荐

    ASP.NET应用程序开发七大技巧

    本篇将详细探讨ASP.NET应用程序开发中的七大关键技巧,帮助开发者提升开发效率和应用性能。 1. **使用母版页(Master Pages)**:母版页是ASP.NET中一种强大的布局工具,它可以为多个页面提供统一的头部、导航和底部...

    ASP.NET WEB应用程序设计 PPT课件

    ASP.NET WEB应用程序设计是一门深度探讨如何构建高效、动态网页应用的技术课程。这门课程的PPT课件详细且易懂,特别适合那些对Web开发感兴趣或者初入这个领域的学习者。通过这些课件,你可以逐步掌握ASP.NET的核心...

    ASP.NET程序设计及应用课件

    VB.NET语法简洁,易于学习,使得开发者能快速构建ASP.NET应用程序。 三、ASP.NET页面生命周期 了解ASP.NET页面生命周期对于有效控制页面行为至关重要。从请求到响应的整个过程中,页面会经历初始化、加载、验证、...

    《ASP.NET Web程序设计》-王祖俪-电子教案-4605

    《ASP.NET Web程序设计》是王祖俪教授的一本经典教材,主要针对ASP.NET技术进行深入浅出的讲解,旨在帮助读者掌握构建Web应用程序的核心技能。ASP.NET是Microsoft .NET框架的一部分,它提供了一种高效、强大的方式来...

    asp.net程序设计基础篇

    至于部署,ASP.NET应用可以发布到IIS(Internet Information Services)服务器上,或者利用Azure等云平台进行托管,实现全球范围内的访问。 学习ASP.NET还需要了解.NET Framework的基础,包括类库、Common Language...

    ASP.NET 4高级程序设计(第4版)源代码

    7. **性能优化**:学习如何使用缓存、输出缓存、页面生命周期管理等技术来提升ASP.NET应用程序的性能。 8. **部署和调试**:源代码中可能包含部署设置和调试技巧,帮助开发者了解如何在不同环境中部署应用程序,并...

    ASP.NET2.0 程序设计教学课件(C#版).rar

    - 配置ASP.NET应用程序,包括web.config文件的结构和用途,以及如何设置权限和错误处理。 - 应用程序的发布和部署过程,包括FTP上传、Web Deploy等方法。 10. **缓存策略**: - 学习如何使用ASP.NET的缓存机制...

    ASP.NET 程序设计基础篇

    此外,IIS(Internet Information Services)作为Web服务器,用于部署和运行ASP.NET应用程序。 4. **网页结构**:ASP.NET网页通常由.aspx文件组成,其中包含HTML、服务器控件和脚本。控件如Button、Label等,可以...

    ASP.NET程序设计电子教案

    10. **部署和调试**:如何将ASP.NET应用发布到IIS服务器,以及如何使用Visual Studio进行调试。 这个电子教案可能还会涉及实际案例分析、代码示例和练习题,以帮助学习者巩固所学知识。严健武老师的教案应该会系统...

    ASP.NET应用程序的十大技巧

    ASP.NET应用程序的开发涉及到许多技巧,以提升代码质量和性能。以下是一些关键点: 1. **避免使用默认控件和文件名**:虽然Visual Studio .NET提供了方便的默认命名,但这可能导致混乱,尤其是在大型项目中。为了...

    asp.net程序设计教程

    部署ASP.NET应用涉及到IIS配置、发布设置、数据库连接等环节。同时,使用Visual Studio的调试工具可以帮助定位和解决运行时的问题。 **九、ASP.NET的安全性** 安全是任何Web应用的重要考虑因素。ASP.NET提供了身份...

    ASP.NET程序设计教程与实训(doc).rar

    10. **部署和配置**:学习如何在IIS(Internet Information Services)上配置和部署ASP.NET应用程序也是必不可少的一部分。 11. **安全性**:ASP.NET提供了多种安全特性,如身份验证、授权、加密等,确保应用程序的...

    Web程序设计-ASP.NET使用网站开发源代码

    2. **ASP.NET应用程序基础 (ch02 ASP.NET应用程序基础.ppt)** - 这部分可能涵盖了ASP.NET的基本结构,如Web Forms、MVC和Web API,以及它们之间的差异和应用场景。 - 也可能讲解了如何创建、配置和部署ASP.NET项目...

    asp.net 程序设计教程 电子教案

    9. **部署与发布**:教授如何将开发好的ASP.NET应用部署到IIS服务器,以及发布到互联网的步骤。 通过这个教程,学习者不仅可以掌握ASP.NET的基本编程技巧,还能了解到如何利用VB.NET编写高效的事件处理代码,从而...

    ASP.NET小程序(源代码)

    ASP.NET是一种由微软开发的服务器端Web应用程序框架,用于...通过深入研究这些源代码文件,我们可以学习到ASP.NET开发的实践技巧,理解如何将数据库操作与前端交互结合,以及如何设计和实现一个完整的Web应用程序流程。

    《ASP.NET程序设计实用教程》ppt

    Identity系统可以轻松集成到ASP.NET应用中,提供安全的身份验证和授权服务。 **8. 部署与调试** ASP.NET应用可以部署到IIS(Internet Information Services)或其他托管环境。Visual Studio提供了强大的调试工具,...

    ASP.NET程序设计(C#版)附源码

    8. **部署与发布**:掌握将ASP.NET应用部署到IIS服务器的方法,以及配置和优化生产环境的技巧。 9. **Web服务与API**:如果教程内容深入,可能会涉及创建和消费Web服务(如SOAP或RESTful API),以及如何使用ASP...

    ASP.NET程序设计实务.rar

    9. **部署与发布**:掌握将ASP.NET应用程序部署到IIS服务器或云平台的方法,以及发布配置的设置。 10. **安全性**:学习如何保护应用程序免受攻击,如身份验证、授权、防止SQL注入和XSS攻击等。 11. **调试与性能...

    ASP.NET WEB程序设计

    "ch12 ASP.NET性能与配置.ppt"会讨论如何优化ASP.NET应用程序,包括IIS配置、调试技巧、性能监控和内存管理。 最后,"ch13 ASP.NET开发实例.ppt"可能包含一系列实战项目,帮助学习者将所学知识应用到实际开发中,...

Global site tag (gtag.js) - Google Analytics