All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
asp.net将Execl读到DataSet或DataTable中_[Asp.Net教程]
PHP实例:PHP实现上传文件生成小图加文字的实例_[PHP教程]
ASP.NET从零起步设计网站全过程(9)_[Asp.Net教程]
小例子:ASP.NET定制简单的错误处理页面_.net资料_编程技术
IIS,6,的,PHP,最佳配置方法_php资料_编程技术
创建ASP.NET 2.0用户控件
visual c++中调试窗口(Call Stack窗口)
PHP.MVC的模板标签系统之标签行为调度_php资料_编程技术
AJAX进度条_[AJAX教程]
delphi高级vcl组件状态栏组件(TStatusBar)使用实例
Reading number is top 10 pictures
漂亮脸蛋魔鬼身材2
The hot big eye big breast beauty3
汪峰的梦想
A man's favorite things7
泳装名模阿尔贝特妮写真2
在加油站厕所门口看到的告示
清扫五脏垃圾,我有绝招
非常漂亮的泳装美女
a pure sister
From China fortress sora aoi2
Download software ranking
圣殿祭司的ASP.NET.2.0.开发详解-使用C#
Eclipse 4.2.2 For Win64
matrix1
Boxer's Top ten classic battle1
jdk1.6 for windows
Unix video tutorial2
好色的外科大夫
Boxer's Top ten classic battle10
Detective task-the top secret prostitution files
The Bermuda triangle3
delv published in(发表于) 2014/1/8 7:04:14 Edit(编辑)
小议优化ASP.NET应用性能之ViewState篇_[Asp.Net教程]

小议优化ASP.NET应用性能之ViewState篇_[Asp.Net教程]

小议优化ASP.NET应用性能之ViewState篇_[Asp.Net教程]

如果你有在IE中查看当前浏览页面HTML源代码的习惯,你也许常会看到类似以下的代码片断:


Machine级 在machine.config中设置
Application级 在Web Applicatin的web.config中设置
单页面级 在该页面中设置<%@Page enableViewStateMac='false' %>或通过代码设置Page.EnableViewStateMac = false;

可是,如果我们完全能通过禁用ViewState来解决数据传输负担而且不产生副作用的话,那MS的架构师们也不会傻到如此可爱的地步(可有可无的东东留它何用?),正因我们往往不能通过简单的禁用来解决这个传输负担问题,所以我们只能另辟路径使之在网络往返中传输量尽可能地小,于是,压缩成了我们的首选。只要我们重载Page类的SavePageStateToPersistenceMedium()方法与LoadPageStateFromPersistenceMedium()方法,并在重载方法中对数据进行压缩与解压的处理即可。开源项目SharpZipLib提供的类GZipInputStream与GZipOutputStream进入了我们的视野,为了方便,不妨写个类CompressionHelper,代码如下:


1using System.IO;
2using ICSharpCode.SharpZipLib.GZip;
3
4namespace Ycweb.Components
5{
6 /**////


7 /// Summary description for CompressionHelper.
8 ///

9 public class CompressionHelper
10 {
11 public CompressionHelper()
12 {
13 //
14 // TOD Add constructor logic here
15 //
16 }
17
18 /**////
19 /// 压缩数据
20 ///

21 /// 待压缩的字节数组
22 /// 压缩后的字节数组
23 public static byte[] CompressByte(byte[] data)
24 {
25 MemoryStream ms = new MemoryStream();
26 Stream s=new GZipOutputStream(ms);
27 s.Write( data, 0, data.Length );
28 s.Close();
29 return ms.ToArray();
30 }
31
32 /**////
33 /// 解压数据
34 ///

35 /// 待解压的字节数组
36 /// 解压出的字节数组
37 public static byte[] DeCompressByte(byte[] data)
38 {
39 byte[] writeData = new byte[2048];
40 MemoryStream ms= new MemoryStream( data );
41 Stream sm = new GZipInputStream(ms) as Stream;
42 MemoryStream outStream = new MemoryStream();
43 while (true)
44 {
45 int size = sm.Read(writeData,0, writeData.Length );
46 if (size >0)
47 {
48 outStream.Write(writeData,0,size);
49 }
50 else
51 {
52 break;
53 }
54 }
55 sm.Close();
56 byte[] outArr = outStream.ToArray();
57 outStream.Close();
58 return outArr;
59 }
60 }
61}


然后我们在派生于类Page的页面控制基类中重载方法LoadPageStateFromPersistenceMedium()与SavePageStateToPersistenceMedium(Object viewState),代码如下:


1Load & Save ViewState Data#region Load & Save ViewState Data
2 protected override object LoadPageStateFromPersistenceMedium()
3 {
4//从自己注册的隐藏域__SmartViewState中读取数据
5 string viewState = Request.Form["__SmartViewState"];
6 byte[] bytes = Convert.FromBase64String(viewState);
7 //调用上面提供的静态方法CompressionHelper.DeCompressByte()来解压数据
8 bytes = CompressionHelper.DeCompressByte(bytes);
9 LosFormatter formatter = new LosFormatter();
10 return formatter.Deserialize(Convert.ToBase64String(bytes));
11
12 }
13
14 protected override void SavePageStateToPersistenceMedium(Object viewState)
15 {
16 LosFormatter formatter = new LosFormatter();
17 StringWriter writer = new StringWriter();
18 formatter.Serialize(writer, viewState);
19 string viewStateString = writer.ToString();
20 byte[] bytes = Convert.FromBase64String(viewStateString);
21 //调用上面提供的静态方法CompressionHelper.CompressByte()来压缩数据
22 bytes = CompressionHelper.CompressByte(bytes);
23
24 //注册一个新的隐藏域__SmartViewState,你也可以自己定义
25 this.RegisterHiddenField("__SmartViewState", Convert.ToBase64String(bytes));
26 }
27#endregion


经过以上处理,web输出页面中的源代码就是型如:



原来的隐藏域"__VIEWSTATE"值为空,而取而代之的是我们自己注册的新的隐藏域"__SmartViewState"来存储了经过压缩后的字符串,这样以来,提速效果是明显的,结合我们的项目,象DG3G.COM的首页原ViewState串值大约是28K,压缩后为7K,而Acafa.com的首页原ViewState串值大约是43K,压缩后为8K。这样的处理还是比较令人满意的。当然,如果你觉得还不够彻底,你还可以把ViewState串存储在Session中,不过这样做,对服务器内存的压力将陡增(尤其是访问量较大的时候),建议还是不要轻易使用,如果你Web服务器内存有个10G、8G的,不妨试试。下面给出相关修改代码:


将上述LoadPageStateFromPersistenceMedium()方法体中的代码:
string viewState = Request.Form["__SmartViewState"];
修改为:
string viewState = Session["__SmartViewState"].ToString();
同时,将上述SavePageStateToPersistenceMedium()体中的代码:
this.RegisterHiddenField("__SmartViewState", Convert.ToBase64String(bytes));
修改为:
Session["__SmartViewState"] = Convert.ToBase64String(bytes);


末了,以上代码和方案均来自VS2003开发实践,对VS2005是否合适,本人不做任何承诺,不过如果你能从以上方案中有所收获,我将感到无比的高兴。


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.