Asp.Net性能优化技巧汇总

 更新时间:2021年9月22日 10:11  点击:2080

本文搜集汇总了Asp.net性能优化的各种技巧,对于Asp.Net开发人员有很好的参考借鉴价值。具体内容如下:

一、选择会话状态存储方式

在Webconfig文件配置:

<sessionState mode="???" stateConnectionString="tcpip=127.0.0.1:42424" 
 sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" 
cookieless="false" timeout="20"/> 

Asp.net有三种方式存储会话状态信息:

1. 存储在进程中: 属性mode = InProc
特点:具有最佳的性能,速度最快,但不能跨多台服务器存储共享.

2. 存储在状态服务器中: 属性mode = "StateServer"
特点: 当需要跨服务器维护用户会话信息时,使用此方法。
但是信息存储在状态服务器上,一旦状态服务器出现故障,信息将丢失

3. 存储在Sql Server中: 属性mode="SqlServer"
特点: 工作负载会变大,但信息不会丢失.

补充一点:
I. 由于某些页面不需要会话状态,则可以将会话状态禁用:
     如下代码所示:

<%@ Page EnableSessionState="false" %>

II.如果页面需要访问会话变量但不允许修改它们,可以设置页面会话状态为只读:
     如下代码所示:

<%@ Page EnableSessionState="false" %>

使用时可以根据具体情况选择某种方式

二、使用Page.IsPostBack

Page.IsPostBack表示是否是从客户端返回的. 初次运行时,不是从客户端返回,它的值为false,当触发页面上的事件或刷新页面时,Page.IsPostBack由于是回发的,值变为true;

一般在:  Page_Load方法中用:

private void Page_Load(Object sender,EventArgs e)
{
if(!Page.IsPostBack)
{
   ....; //初始化页面的代码。这些代码第一次页面初始化时执行,当第二次回发时,
   //不会再执行。提高效率。 
}
}

往往很多时候不得不用IsPostBack, 因为有些控件初始化后,要保持它的状态.
例如: DropDownList,如果每次都初始化,则用户无论选择其选项,都会被初始化为默认值.

三、避免使用服务器控件

1.一般的静态显示信息,尽量不要用服务端控件显示. 因为服务端控件需要回发服务端执行,会降低程序执行效率,一般用<DIV>显示即可. 如果用了服务端控件,将: runat="server"去掉,也会提高效率.

2.禁用服务端控件的状态视图,有些控件不需要维护其状态,可以设置其属性: EnableViewState=false;
如果整个页面控件都不需要维持状态视图,则可以设置整个页面的状态视力为false:
 如下代码所示:

<%@ Page EnableViewState="false"%>

3.在Web.Config文件中配置:
  ASP.NET Sessionss可以在Web.config或Machine.config中的Sessionsstate元素中配置。
下面是在 Web.config中的设置的例子:

<Sessionsstate timeout="10" cookieless="false" mode="Inproc" /> 

四、避免使用DataGrid

大家都知道DataGrid功能强大。 但是功能强大的同时,增加了性能上的开销。 一般用其它控件: DataList
或Repeater控件能实现的,尽量不用DataGrid.

五、字符串操作

1.避免装箱操作.  装箱操作运行效率比较低.
例如运行两个代码段:  

string test="";
for(for int i=0;i<10000;i++)
{ 
  test = test + i;       
}

string test="";
for(for int i=0;i<10000;i++)
{ 
  test = test + i.ToString();       
}

下面的代码段显然效率要高.因为i是整型的,系统要先把i进行装箱转换为string型的,再进行连接. 需要时间
读者可以Copy到自己机器上测试一下.

2.使用StringBulider类

在进行字符串连接时:  string str = str1 + str2 + ....;
一般超过三项连接,最好用StringBuilder来代替String类.  StringBuilder可以避免重新创建String 对象造成
的性能损失.
一般用于组装Sql语句时用到: StringBulider.读者可以到自己机器上测试一下.

3.尽量少用:

try
{}
catch
{}
finally
{}

语句.此语句执行效率比较低.

六、ADO.Net使用方面优化

1.数据库连接打开和关闭。在需要连接时打开,当访问完数据库要立刻关闭连接.
举例说明,还是看两个代码段:

代码1:
  

DataSet ds = new DataSet();
  SqlConnection MyConnection = new SqlConnection("server=localhost; uid=sa; pwd=; database=NorthWind");
  SqlCommand myCommand = new SqlCommand(strSql,MyConnection);  
  SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);
MyConnection.Open();   //打开连接
 for(int i=0;i<1000;i++)  //for循环模拟取得数据前的商业逻辑操作
 {
  Thread.Sleep(1000);
}
myAdapter.Fill(ds);
for(int i=0;i<1000;i++)  //for循环模拟取得数据后的商业逻辑操作
{
  Thread.Sleep(1000);
}
MyConnection.Close();   //关闭连接

代码2:
  

 DataSet ds = new DataSet();
  SqlConnection MyConnection = new SqlConnection("server=localhost; uid=sa; pwd=; database=NorthWind");
  SqlCommand myCommand = new SqlCommand(strSql,MyConnection);  
  SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);    
 for(int i=0;i<1000;i++)  //for循环模拟取得数据前的商业逻辑操作
 {
  Thread.Sleep(1000);
}
MyConnection.Open();   //打开连接
  myAdapter.Fill(ds);
 MyConnection.Close();   //关闭连接
for(int i=0;i<1000;i++)  ////for循环模拟取得数据后的商业逻辑操作
{
  Thread.Sleep(1000);
}

显示II代码比I代码好的多,I中早早占着连接不放,如果用户很多的话,容易出现连接池满情况。严重时出现死机现象.

2.数据库查询

I.  直接生成SQL语句。 Sql Server每次都要对其进行编译,在性能方面不会有很大的提高。 另外也不够安全。容易被攻击.
II. 使用带参数的SQL命令。这种方式Sql Server只对其编译一次,对于不同的参数可以重复使用编译后的命令。提高了性能.
III.使用Sql Server存储过程. 编译一次. 具有独立性,便于修改和维护.  一次能完成用语句发送多次的功能.减少了网络的流量。  并不一定存储过程一定比语句效率要高,如果商业逻辑很复杂的话,有时候用语句比存储过程效率要高.

七、缓存优化

缓存分为两种:页面缓存和API缓存.

1.使用页面缓存和片段缓存:

<%@ OutputCache Duration="5" VaryByParam="None"%> 
<%@ OutputCache Duration=60 VaryByParam=”TextBox1,TextBox2” %>

说明: Duration是设置Cache的过期时间;
VarByParam是设置是否根据参数而变化,None是所有参数使用同一Cache, 
设置TextBox1时则根据TextBox1的不同值分别缓存;当有多个参数时则要组合缓存
;

2.API缓存。用于在应用程序中使用

I. 一个Cache使用的例子:
   https://www.jb51.net/article/52399.htm

II.使用时注意Page.Cache和HttpContext.Current.Cache区别:

它们指的同一个对象,在Page里,用Page.Cache,如果在global.asax或自己的类里用:HttpContext.Current.Cache
在有些事件中,由于其没有HttpContext,就用HttpRuntime.Cache.

[!--infotagslink--]

相关文章

  • ASP.NET购物车实现过程详解

    这篇文章主要为大家详细介绍了ASP.NET购物车的实现过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
  • 在ASP.NET 2.0中操作数据之七十二:调试存储过程

    在开发过程中,使用Visual Studio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样Visual Studio也支持对SQL Server里面的存储过程进行调试,下面就让我们看看具体的调试方法。...2021-09-22
  • photoshop打开很慢怎么办 ps打开慢的设置技巧

    photoshop软件是一款专业的图像设计软件了,但对电脑的要求也是越高越好的,如果配置一般打开ps会比较慢了,那么photoshop打开很慢怎么办呢,下面来看问题解决办法。 1、...2016-09-14
  • Jquery Ajax Error 调试错误的技巧

    JQuery使我们在开发Ajax应用程序的时候提高了效率,减少了许多兼容性问题,我们在Ajax项目中,遇到ajax异步获取数据出错怎么办,我们可以通过捕捉error事件来获取出错的信息。在没给大家介绍正文之前先给分享Jquery中AJAX参...2015-11-24
  • Mysql效率优化定位较低sql的两种方式

    关于mysql效率优化一般通过以下两种方式定位执行效率较低的sql语句。通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_quer...2015-11-08
  • MySQL针对Discuz论坛程序的基本优化教程

    过了这么久,discuz论坛的问题还是困扰着很多网友,其实从各论坛里看到的问题总结出来,很关键的一点都是因为没有将数据表引擎转成InnoDB导致的,discuz在并发稍微高一点的环境下就表现的非常糟糕,产生大量的锁等待,这时候如果...2015-11-24
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • 图解Sublime Text3使用技巧

    通过本篇文章给大家介绍Sublime Text3使用技巧的相关知识,对sublime text3技巧相关知识感兴趣的朋友一起学习吧...2015-12-24
  • 101个MySQL的配置和优化以及备份的经验提示

    MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化 MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通用的。我已经把...2013-09-11
  • 基于PHP给大家讲解防刷票的一些技巧

    刷票行为,一直以来都是个难题,无法从根本上防止。但是我们可以尽量减少刷票的伤害,比如:通过人为增加的逻辑限制。基于 PHP,下面介绍防刷票的一些技巧:1、使用CURL进行信息伪造$ch = curl_init(); curl_setopt($ch, CURLOP...2015-11-24
  • Angular性能优化之第三方组件和懒加载技术

    这篇文章主要介绍了Angular性能优化之第三方组件和懒加载技术,对性能优化感兴趣的同学,可以参考下...2021-05-11
  • ASP.NET Core根据环境变量支持多个 appsettings.json配置文件

    这篇文章主要介绍了ASP.NET Core根据环境变量支持多个 appsettings.json配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • 带你了解PHP7 性能翻倍的关键

    20岁老牌网页程序语言PHP,最快将在10月底释出PHP 7新版,这是十年来的首次大改版,最大特色是在性能上的大突破,能比前一版PHP 5快上一倍,PHP之父Rasmus Lerdorf表示,甚至能比HHVM虚拟机下的PHP程序性能更快。HHVM 是脸书为自...2015-11-24
  • 记一次EFCore类型转换错误及解决方案

    这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
  • C#程序优化-有效减少CPU占用率

    本文给大家介绍的是C#程序优化的小技巧,通过此方法可以有效的降低CPU的占用率,十分的简单实用,有需要的小伙伴可以参考下。...2020-06-25
  • JavaScript提高网站性能优化的建议(二)

    这篇文章主要介绍了JavaScript提高网站性能优化的建议(二)的相关资料,需要的朋友可以参考下...2016-07-29
  • 利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)

    这篇文章主要介绍了利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化),本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-24
  • 网站广告怎么投放最好?首屏广告投放类型优化和广告位布局优化的案例

    网站广告怎么投放最好?一个网站中广告位置最好的是哪几个地方呢,许多的朋友都不知道如何让自己的网站广告收效最好了,今天我们就一起来看看吧。 在说到联盟优化前,...2016-10-10
  • 分享12个非常实用的JavaScript小技巧

    这篇文章主要介绍了分享12个非常实用的JavaScript小技巧,这些小技巧可能在你的实际工作中或许能帮助你解决一些问题,需要的朋友可以参考下...2016-05-14