ASP.NET 程序优化

一、SqlDataRead和Dataset的选择

Sqldataread优点:读取数据非常快。如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性能要比datset好很多。缺点:直到数据读完才可close掉于数据库的连接

(SqlDataReader 读数据是快速向前的。SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。它使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。DataReader需及时显式的close。可及时的释放对数据的连接。)

Dataset是把数据读出,缓存在内存中。缺点:对内存的占用较高。如果对返回的数据需做大量的处理用Dataset比较好些可以减少对数据库的连接操作。优点:只需连接一次就可close于数据库的连接

*一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用datset比较合适.对SqlDataReader和Dataset的选择取决于程序功能的实现。

二、ExecuteNonQuery和ExecuteScalar

对数据的更新不需要返回结果集,建议使用ExecuteNonQuery。由于不返回结果集可省掉网络数据传输。它仅仅返回受影响的行数。如果只需更新数据用ExecuteNonQuery性能的开销比较小。

ExecuteScalar它只返回结果集中第一行的第一列。使用 ExecuteScalar 方法从数据库中检索单个值(例如id号)。与使用 ExecuteReader 方法, 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。

*只需更新数据用ExecuteNonQuery.单个值的查询使用ExecuteScalar数据绑定的选择

三、数据的绑定DataBinder

一般的绑定方法用DataBinder.eval 绑定不必关心数据来源(Dataread或dataset)。不必关心数据的类型eval会把这个数据对象转换为一个字符串。在底层绑定做了很多工作,使用了反射性能。正因为使用方便了,但却影响了数据性能。来看下。当于dataset绑定时,DataItem其实式一个DataRowView(如果绑定的是一个数据读取器(dataread)它就是一个IdataRecord。)因此直接转换成DataRowView的话,将会给性能带来很大提升。

*对数据的绑定建议使用。数据量大的时候可提高几百倍的速度。使用时注意2方面:1.需在页面添加.2.注意字段名的大小写(要特别注意)。如果和查询的不一致,在某些情况下会导致比还要慢。如果想进一步提高速度,可采用的方法。不过其可读性不高。

以上的是vb.net的写法。在c#中:<@% ((DataRowView)Container.DataItem)["字段名"] %>

对查看页面每个执行过程状态最简单的办法:其页面的trace属性为true就可查看细节。

一、使用存储过程:

1、性能方面:存储过程提供了许多标准sql语言中所没有的高级特性。其传递参数和执行逻辑表达式的功能,有助于应用程序设计者处理复杂任务。另外,存储过程存储在本地服务器上,减少了执行该过程所需的网络传输宽带和执行时间。(存储过程已经对sql语句进行了预编译,所以其执行速度比在程序里执行sql语句快很多)

2、程序结构方面:从程序的可扩展性看,使用存储过程会对程序以后的修改带来方便。比如数据库的结构改变了,只需修改相对应的存储结构,和程序中的调用部分即可。这部分不属于本文探讨范围,属于程序结构设计方面。所以不在此展开。

3、程序安全性:使用存储过程可避免SQL Injection攻击。

二、查询语句的优化(针对sql server2000)

很多人只为目的写出sql语句,而不考虑sql语句的执行效率。在这我只提供一优化表顺序的方法,(sql语句的优化和原则将会在我的sql server2000学习笔记中专题讨论)

对sql语句执行效率可用sql server2000的查询分析器来查看语句的执行过程。

优化表顺序:一般情况下,sqlserver 会对表的连接作出自动优化。例如:select name,no from A join B on A. id=B.id join C on C.id=A.id where name=’wang’

尽管A表在From中先列出,然后才是B,最后才是C。但sql server可能会首先使用c表。它的选择原则是相对于该查询限制为单行或少数几行,就可以减少在其他表中查找的总数据量。绝大多数情况下,sql server 会作出最优的选择,但如果你发觉某个复杂的联结查询速度比预计的要慢,就可以使用SET FORCEPLAN语句强制sql server按照表出现顺序使用表。如上例加上:SET FORCEPLAN ON…….SET FORCEPLAN OFF 表的执行顺序将会按照你所写的顺序执行。在查询分析器中查看2种执行效率,从而选择表的连接顺序。

*使用SET FORCEPLAN选择表联结顺序

三、页面的优化(.aspx)

主要针对几个页面属性

1、EnableViewState(页面的视图状态)。如果无特殊要求设置为false。使用ViewState ,每个对象都必须先序列化到 ViewState 中,然后再通过回传进行反序列化,因此使用 ViewState是没有代价的。尽量减少使用对象,如果可能,尽量减少放入 ViewState 中的对象的数目。下面情况基本上可以禁用viewstate:

(1)页面控件 (.ascx)

(2)页面不回传给自身。

(3)无需对控件的事件处理。

(4)控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理)

单个页面或每个页面都禁用 ViewState,如下所示:单个页面: 每个页面:在 web.config 中 EnableSessionState保持默认值即可(如果页面用到sessionstate它才会占用资源)。EnableViewStateMac如果无安全上的特殊要求,保持默认值。

2、Pagelayout.页面布局模型。建议使用Flowlayout(元素不带绝对定位属性添加).Gridlayout(绝对定位属性)由于采用绝对定位,将会比Flowlayout生产更多的代码,主要是控件的定位信息。

3、项目发布的时候切记解除页面的Debug状态。

4、Html语言的优化。我的建议是熟练掌握Html/javascript,少用vs.net2003自动生产的代码,它会自动生成一些无用的html代码。

5、smart navigation设置为true能让用户明显的感觉性能提高。启用此属性后对客户端和服务端影响不大.它能智能涮新需要涮新需涮新的部分.

四、控件的选择:

Html控件和服务器控件的选择。服务器控件带来的方便和功能上的实现是html控件所不能比拟的。但是是以牺牲服务器端的资源来取得的。我个人建议:如果html控件达不到所要实现的功能,而且和一些脚本语言(如javascrpt/vbscript)结合也不能实现的话。才会选择服务器控件。选择服务器控件后,也尽量对其控件优化,如取消一些页面状态等(具体看控件的优化)

服务器控件的选择:主要针对几个常用数据控件说明一下:

DataGrid:自带最强大的数据显示控件,内置了对数据的修改、删除、添加、分页等很多实用功能。如果你只需对数据显示的话,尽量不要选择DataGrid(它把数据都存储在viewstate中).也不要使用自带的分页功能,microsoft在自动分页的底层做了很多工作,虽然使用方便了,但性能开销大了。

DataList:比DataGrid功能少了很多。但自定义性强了很多。特有的多行数据显示,给我们带来了很多方便。DataGrid能实现的功能,它基本能实现。所以建议使用它。

Repeater:功能最少,但自定义性非常强。如果只需对数据显示,建议使用。由于减少了很多功能,对服务器的性能带来消耗最小。因此,如果是对数据显示的话,我基本上都是选择Repeater然后DataList最后DataGrid

*尽量选择html控件。能在客户端实现的功能就在客户端实现(熟练掌握javascript),减少服务器的压力。数据控件选择顺序:Repeater、DataList、DataGrid

五、服务器控件的优化:

1、Viewstate

控件的viewstate与页面的viewstate基本是一致的。用来保存控件的一些状态。处理原则和处理页面的viewstate一样。有兴趣的可以用Datagrid绑定数据测试下viewstate保存的数据量有多大,它所保存的数据基本和Datagrid显示的数据量大小是等同的。

2、Ispostpack

默认false.需要产生事件的时候才需设置为true.

控件的优化,主要看你对此控件的熟悉情况。对控件内部运作的原理越了解,就会对其作出合适的优化。

性能优化是三两句话说不清的,我所写出的仅仅是冰山一角,性能的优化是靠平时经验的积累和对程序的运作原理的不断认知。

出处:http://blog.csdn.net/jacky4955/article/details/4458254

转载于:https://www.cnblogs.com/mq0036/p/3719821.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python pandas excel数据处理_Python处理Excel数据-pandas篇

Python处理Excel数据-pandas篇非常适用于大量数据的拼接、清洗、筛选及分析在计算机编程中&#xff0c;pandas是Python编程语言的用于数据操纵和分析的软件库。特别是&#xff0c;它提供操纵数值表格和时间序列的数据结构和运算操作。它的名字衍生自术语“面板数据”(panel dat…

Proe Top-Down设计演示

前段时间有网友问我&#xff0c;proe 里面有没有装配设计中当某一零件尺寸需要修改时&#xff0c; 与其相关的零件尺寸都需要随之做相应改变的法子。我认为top-down是很好的选择。 下面介绍一下top-down的理论&#xff1a; 就按照产品的功能要求先定义产品架构并考虑组件与零件…

spring和maven_具有Spring和Maven教程的JAX–WS

spring和mavenSpring框架通过JAX-WS提供对Web服务的远程支持&#xff0c;实际上&#xff0c;如Spring 参考文档中所述 &#xff0c;有三种将Spring POJO服务公开为JAX-WS Web服务的方式&#xff1a; 公开基于Servlet的Web服务&#xff08;适用于Java EE 5环境&#xff09; 导…

python映射实体类_【HIBERNATE框架开发之二】第一个HIBERNATE-ANNONATION项目(采用@ENTITY、@ID直接映射实体类)...

紧接上一篇&#xff0c;这里Himi直接copy上一篇创建的HelloHibernate项目&#xff0c;然后改名为&#xff1a;HelloAnnonation,Ok&#xff1b;OK&#xff0c;准备工作&#xff1a;首先第一步&#xff0c;继续再我们自定义的user libraries 中添加Annotation所需的包&#xff0c…

Union-SQL Server学习笔记

1、简单笔记 数据库查询语句中&#xff0c;通过UNION组合查询语句&#xff0c;可以将两个或更多查询的结果组合为单个结果集&#xff0c;该结果集包含组合查询中的所有查询的全部行。 利用UNION语句可以实现将不同数据表中符合条件&#xff0c;不同列种的数据信息&#xff0c;显…

从Java集成Active Directory

首先&#xff0c;您将需要设置Active Directory&#xff0c;以便可以运行和测试代码。 如果&#xff08;像我一样&#xff09;没有一台装有Windows Server的计算机&#xff0c;那么即使在Mac OSX上&#xff0c;也可以通过这种方法设置Active Directory。 您要做的第一件事是在…

编译 php mysql 依赖包_MySQL 5.5.15源码包编译安装

mysql果然是不愧是目前最火的数据库&#xff0c;自从mysql5.5.8之后&#xff0c;mysql的源码包编译安装都要用到cmake来进行编译了&#xff0c;编译的过程没有本质mysql果然是不愧是目前最火的数据库&#xff0c;自从mysql5.5.8之后&#xff0c;mysql的源码包编译安装都要用到c…

云计算之路-阿里云上:基于Xen的IO模型进一步分析“黑色0.1秒”问题

在发现云服务器读取OCS缓存的“黑色0.1秒”是发生在socket读取数据时&#xff0c;而且是发生在读取开始的字节&#xff0c;甚至在socket写数据时&#xff08;比如写入缓存key&#xff09;也会出现超过50ms的情况&#xff0c;我们的好奇心被激发到一个新的高度。 根据我们的实测…

Cobertura和Sonar 5.1的问题

最近&#xff0c;我有些麻烦&#xff0c;试图在我的Grails 2.4.4项目中使用Sonar 5.1。 我使用的是Groovy常用的东西&#xff1a; Gmetrics&#xff0c;Codenarc和Cobertura 。 对于Sonar数据库&#xff0c;我使用的是Postgres 9.4 。 声纳跑步者的日志文件给了我这个&#xf…

centos6.4 卸载mysql_彻底删除MYSQL-CENTOS

yum remove mysql mysql-server mysql-libs compat-mysql51rm -rf /var/lib/mysqlrm /etc/my.cnf查看是否还有mysql软件&#xff1a;rpm -qa|grep mysql有的话继续删除RPM方式安装MySQL5.6a. 检查MySQL及相关RPM包&#xff0c;是否安装&#xff0c;如果有安装&#xff0c;则移除…

ARIMA模型建模步骤

ARIMA模型建模步骤一. 绘制时序图判断序列是否有明显的趋势或周期二. 单位根检验检验方法ADFDFGLSPPKPSSERSNP前三种有有关常数与趋势项假设&#xff0c;应用不方便&#xff0c;建议少用。后三种是去除原序列趋势后进行检验&#xff0c;应用方便。原假设6种方法除KPPS外&#x…

WT2605C音频蓝牙语音芯片:单芯片实现蓝牙+MP3+BLE+电话本多功能应用

在当今的电子产品领域&#xff0c;多功能、高集成度成为了一种趋势。各种产品都需要具备多种功能&#xff0c;以满足用户多样化的需求。针对这一市场趋势&#xff0c;唯创知音推出了一款集成了蓝牙、MP3播放、BLE和电话本功能的音频蓝牙语音芯片——WT2605C&#xff0c;实现了单…

rabbitmq订单模块_RabbitMQ播放模块! 构架

rabbitmq订单模块RabbitMQ提供了具有可预测且一致的吞吐量和延迟的高可用性&#xff0c;可伸缩和便携式消息传递系统。 RabbitMQ是AMQP &#xff08;业务消息传递的开放标准&#xff09;的领先实现 &#xff0c;并且通过适配器支持XMPP&#xff0c;SMTP&#xff0c;STOMP和HTTP…

mysql as join_mysql as 别名与 join 多表连接语法

在MySQL中&#xff0c;使用AS关键字为字段、表、视图取别名&#xff0c;或者不用as&#xff0c;用空格隔开&#xff1a;SELECT (SELECT id a,title b FROM blog c limit 1)d;使用字段别名&#xff0c;可以帮助我们有效的组织查询的输出结果。---------------------------------…

'固定' table宽度,走起!

为了让表格能够填充屏幕(剩余空白区域)&#xff0c;常将其宽度属性定义为&#xff1a;100%&#xff0c;单元格也是用百分数来定义。 但这样就会出现问题&#xff1a; 如果单元格中的文本超过宽度限制&#xff0c;就会自动换行&#xff0c;高度自动增高&#xff0c;导致整个表格…

python中view的用法_APIview使用

ModelVIewSet 是对 APIView 封装ModelSerializer 是对 Serializer1.1 在user/urls.py中添加路由urlpatterns [ path(apiview/, views.UserInfoViewSet.as_view()), ]1.2 创建user/serializers.py写序列化器serializers.ModelSerializer 和 serializers.Serializer field参数…

HDU 1597 find the nth digit (二分查找)

二分查找 1 #include<stdio.h>2 __int64 a[65555];3 void init()4 {5 a[0]0;6 for(int i1;i<65537;i)7 {8 a[i]a[i-1]i;9 } 10 } 11 int search(int n,int low,int high) 12 { 13 int temp(lowhigh)/2; 14 if(na[temp]) return temp-…

java 注解应用技巧_改善Java应用程序性能的快速技巧

java 注解应用技巧曾经遇到过性能问题吗&#xff1f; 我也是。 如果我的经理再喊一次“ faaaaster”&#xff0c;我一生都会有听力障碍。 顺便说一句&#xff0c;我能听到所有噪音中的德语发音吗&#xff1f; ;-) 您可以相信仍然有人无知地在谈论垃圾收集器&#xff08;得到它吗…

字符串系列函数(不断跟新)

1.sprintf,sprintf_s sprintf(char* buffer, const char* format, [argument]); vs下需要加上_CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int main() {char name[1];int input 9099;sprintf(name,"%d", input);system("pause&qu…

python获取指定区域的像素_如何获得某个区域的像素值?

因此&#xff0c;由于我对编程比较陌生&#xff0c;所以我需要一些帮助来解决这个问题。我在Windows计算机上使用SimpleCV和python2.7。我要做的是让一个(自写)程序告诉我沿着一条预设线的像素值&#xff0c;这里最重要的是每个像素的颜色。在我真的不知道从哪里开始&#xff0…