迷恋自留地 发表于 2020-9-18 15:19

[ASP.NET]提高 ASP.NET Web 应用性能的 19种方法和技巧

# 前言
标题是ASP.NET的但大部分对于c#又是有用的

1. debug=「false」
当创建 ASP.NET Web应用程序,默认设置为「true」。开发过程中,设置为「true」是非常有用多,但在应用程序发布部署时,需将其设置为「false」。

```
<compilation defaultLanguage="C#" debug="false" targetFramework="4.0" />

```

2. 关闭 tracing(追踪)
tracing 是非常可怕的,你有没有忘记关闭它。假如没用,请确定编辑 web.config 并且关闭它。它将占用大量您的程序资源。

<trace enabled="false" requestLimit=”10” pageoutput=”false” traceMode=”SortByTime” localOnly=”true”>

3. 禁用 session
假如您用不到 session 会话跟踪请务必禁用它。您可以在每个 asp.net 页面中设置如下:

```
<%@ page language="c#" codebehind="webform1.aspx.cs" autoeventwireup="false" inherits="webapplication1.webform1"
enablesessionstate="false" %>
```



4. 使用发布版本部署应用
部署应用程序到生产环境时,要确保使用的发布版本模式,而不是调试模式。如果使用调试模板极容易发生请求超时。部署成发布版本,你将会发现速度有很大的提升。

5. 关闭页面的 View State
View State 主要是在提交以后回显用的,它只有在页面中的数据是提交到本页时才有用。其默认是「true」。如果你没有使用表单数据回传,那么可以关闭 View State。


```
<%@ Page EnableViewState="false" %>
```


6. 避免使用 Response.Redirect
Redirect(重定向)非常麻烦,它仅用于用于从当前物理服务器开发跳转到其它服务器。如果只是在本服务器开发内页面跳转请使用 Server.Transfer 语法,这样会减少很多没有必要的客户端重定向。

7. 运用 StringBuilder 类以及使用 ToString()方法
String 类对象是不可改变的,对于 String 对象的重新赋值在本质上是重新创建了一个 String 对象并将新值赋予该对象,其方法 ToString 对性能的提高并非很显著。在处理字符串时,最好使用 StringBuilder 类,其 .NET 命名空间是 System.Text。该类并非创建新的对象,而是通过 Append,Remove,Insert 等方法直接对字符串进行操作,通过 ToString 方法返回操作结果。
其定义及操作语句如下所示:


```
int num;
  System.Text.StringBuilder str = new System.Text.StringBuilder(); //创建字符串
  str.Append(num.ToString()); //添加数值num
  Response.Write(str.ToString); //显示操作结果

```

8. 避免抛出异常
异常会导致速度变慢,并且使得应用程序页面显示异常,使得无法进行其他操作。可以使用 try / catch 使出现的异常记录到日志文件中。

9. 使用 finally 方法回收资源
假如你在应用开发中大量使用其他数据库连接和访问文件,请确定在用完后关闭它们。finally 块是程序中最后被执行,因此在这里面的代码会确保一定会被执行,关闭代码一定要在这个开发方法块中执行。

10. 使用客户端脚本验证
用客户端验证代替服务器开发端验证。服务器开发端数据验证将会大量消耗您的服务器开发上的资源,并且会代来大量的页面数据回传。

11. 使用 Page.IsPostback
请确保不执行过多的回传代码。使用 Page.IsPostBack 属性,以确保只执行页面初始化逻辑,当一个页面第一次加载,而不向响应客户回发。

12. 使用分页
大多数 Web 应用程序数据是以表格形式显示。分页有利用应用开发程序效率。每次尽量显示小部分数据,这样会加快页面显示速度。

13. 使用 Ajax 异步调用
使用 Ajax 方法,进行异步调用。

14. 删除未使用的 HttpModules
对于 httpModules,我们可以理解为:建立一个通用的可用被插入任何 Web 应用程序的 HttpApplication 事件钩子。使用 HttpModule 是可复用的,不需要特定语应用程序代码的,只需要 web.config 中的一个条目。
在 web.config 文件中,删除未使用的 HttpModules。

15. 避免递归函数/嵌套循环
在任何编程语言中都需避免嵌套循环和递归函数,以提高性能。

16. 不使用不必要的 Server Control
ASP.NET 中,大量的服务器端控件方便了程序开发,但也可能带来性能的损失,因为用户每操作一次服务器端控件,就产生一次与服务器端的往返过程。因此,非必要,应当少使用 Server Control。

17. 调用多个操作时,请使用多线程
问题出现时,单线程卡在此问题上长时间运行。因此,可以使用多个线程以提高应用程序的响应速度。

18. 数据库的连接和关闭
访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET 中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。

19. 将 SqlDataReader 类用于快速只进数据游标
SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。如果当创建 ASP.NET 应用程序时出现允许您使用它的情况,则 SqlDataReader 类提供比 DataSet 类更高的性能。情况之所以这样,是因为 SqlDataReader 使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。另外,SqlDataReader 类实现 IEnumerable 接口,该接口也允许您将数据绑定到服务器控件。有关更多信息,请参见 SqlDataReader 类。有关 ASP.NET 如何访问数据的信息,请参见通过 ASP.NET 访问数据。

性本善 发表于 2020-9-18 17:57

还是在学校时学的ASP,就知道第一个

goldli 发表于 2020-9-18 20:40

已过时的内容 .

5653325 发表于 2020-9-24 22:35

现在已经是.NetCore的时代了。

conanin 发表于 2020-11-12 08:11

这个确实是干货,多谢楼主分享
页: [1]
查看完整版本: [ASP.NET]提高 ASP.NET Web 应用性能的 19种方法和技巧