仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1864|回复: 19
打印 上一主题 下一主题

[学习教程] ASP网页编程之去失落DataGrid的ViewState中的无用数据

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:37:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。datagrid|数据   在Asp.Net中,咱们利用最多的生怕就是DataGrid列表控件了。这个控件的功效的却十分壮大,也十分好用。它不仅可以完成恣意的格局化选择,并且还可以静态停止分页、排序、添加按钮、静态编纂等功效。可以说,DataGrid控件已完成了咱们需求的大局部功效。

DataGrid控件需求经由过程ViewState来保留控件的形态的,假如咱们封闭了ViewState,即在HTML代码中利用了EnableViewState="False"属性,那末,下面的一切有效的功效咱们将没法利用。

而ViewState的弱点也是很大的,就是DataGrid会把一切的数据源中的数据寄存到ViewState中。我实验了一下,一个包含5000笔记录的数据库,假如不在数据库端掌握数据量的话,直接利用Select * From TableName如许的Sql语句绑定命据的话,一个Asp.Net静态网页(唯一一个DataGrid控件的测试页)的ViewState有60k之多。而如许一个网页放到公共Web网站,迟缓的网页下载速度将会使大局部人望而生畏,利用56k猫上彀的人就更不要提了,基本没法会见如许的网页,守候的工夫将不成忍耐。

DataGrid保留在ViewState中的数据分为两个局部,一局部是保留索援用的,就是DataKeys和DataItems如许的属性利用的数据,咱们把它称之为索引数据。还有一局部是DataGrid中数据源的内容,咱们称之为列表数据。

咱们假如把实践上无用的列表数据从ViewState中去除,如许可以大大减小页面ViewState的数据巨细,利用DataGrid时ViewState数据量太大的基本缘由就是列表数据寄存在ViewState中。

DataGrid的外部任务流程:在数据绑定初始化的时分,生成了一个叫DataGridTable的控件对象,这个对象是承继System.Web.UI.WebControls.Table控件的。并且这个对象是最早到场(利用Controls.Add()办法)DataGrid中的。并且ViewState中的DataGrid列表数据也是这个控件到场到DataGrid中的。实践上,ViewState中的DataGrid的单位格中的数据实践上是System.Web.UI.WebControls.Table控件的SaveViewState()办法给加出来的。这些数据良多情形下是不需求的。

?

处理办法:在数据绑定的时分,设置DataGrid中DataGridTable控件的EnableViewState属性为False就能够了。

?

起首在页面初始化中的InitializeComponent()办法内到场事务的拜托:

private void InitializeComponent()

{

??? this.myDataGrid.ItemDataBound +=

new DataGridItemEventHandler(this.myDataGrid_ItemDataBound);

}

然后在myDataGrid_ItemDataBound办法内到场掌握代码:

private void myDataGrid_ItemDataBound(object sender, DataGridItemEventArgs e)

{

??? myDataGrid.Controls[0].EnableViewState = false;

}

利用DataGrid时,把下面的代码到场,将减小利用DataGrid时ViewState的90%的数据量。并且,DataGrid中很多利用ViewState的功效涓滴很多,岂不是一举两得?

?

固然,网页履行第一次时,DataGrid的内容正常显示,而利用了下面的去除ViewState办法后,页面假如回发处置,DataGrid的内容将会消逝。我才分明DataGrid内DataGridTable把数据寄存在ViewState内的意图。微软的设计长短常严谨的,他们的意图就是当利用Page.IsPostBack属性时,仅会见一次数据库就能够永世坚持DataGrid的数据(在不分开此页面的情形下),数据寄存的地址就是页面的ViewState中。如许页面回发后,DataGrid就能够从ViewState中从头生成DataGrid的显示内容,无需会见数据库。所以说微软以就义客户下载的速度(ViewState数据量)来包管办事器的资本,人人都晓得频仍会见数据库对办事器的资本损耗很大。

所以,利用下面削减DataGrid的ViewState数据的方法是可行的,然而必需使一切的页面回发处置都必需停止数据绑定,不然DataGrid没法取得数据库内容,也没法取得ViewState中保留的数据,那末回发后DataGrid将没法显示任何内容。

?

总结:利用下面削减ViewState的举措可以大大加速客户真个下载显示速度,然而频仍的数据库会见将加大办事器的压力;利用ViewState可以加重办事器的压力,然而又加大了客户真个下载工夫,它们是相互抵触的。所以开辟者要依据实践情形选择是不是利用DataGrid.Controls[0].EnableViewState=false;的方法,若何选择,人人请本人推敲。

</p>  Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。
小女巫 该用户已被删除
沙发
 楼主| 发表于 2015-2-4 03:59:09 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
变相怪杰 该用户已被删除
板凳
发表于 2015-2-7 16:45:48 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
蒙在股里 该用户已被删除
地板
发表于 2015-2-8 15:26:30 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
因胸联盟 该用户已被删除
5#
发表于 2015-3-3 17:05:41 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
谁可相欹 该用户已被删除
6#
发表于 2015-3-8 23:01:03 | 只看该作者
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
7#
发表于 2015-3-16 17:21:52 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
再现理想 该用户已被删除
8#
发表于 2015-3-17 01:09:02 | 只看该作者
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
深爱那片海 该用户已被删除
9#
发表于 2015-3-19 07:55:41 | 只看该作者
从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了
金色的骷髅 该用户已被删除
10#
发表于 2015-3-20 06:47:22 | 只看该作者
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
灵魂腐蚀 该用户已被删除
11#
发表于 2015-3-25 11:41:26 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
若天明 该用户已被删除
12#
发表于 2015-4-1 09:09:43 | 只看该作者
运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
老尸 该用户已被删除
13#
发表于 2015-4-7 17:03:44 | 只看该作者
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
飘灵儿 该用户已被删除
14#
发表于 2015-4-12 12:58:15 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
冷月葬花魂 该用户已被删除
15#
发表于 2015-4-15 04:00:10 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
爱飞 该用户已被删除
16#
发表于 2015-4-28 13:21:41 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
若相依 该用户已被删除
17#
发表于 2015-5-6 12:11:56 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
只想知道 该用户已被删除
18#
发表于 2015-5-7 23:42:08 | 只看该作者
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
飘飘悠悠 该用户已被删除
19#
发表于 2015-6-8 20:47:55 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
乐观 该用户已被删除
20#
发表于 2015-6-21 06:08:44 | 只看该作者
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表