|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
捆绑编译器。用户不需要受制于厂家,自己就能将程序在新平台上编译运行。除了牛B轰轰的linux,估计也没有系统捆绑c/c++的编译器,而且许多新平台都无法支持复杂的c/c++编译器在上面直接运行。asp.net|功能|优化假如你有在IE中检察以后扫瞄页面HTML源代码的习气,你大概常会看到相似以下的代码片段:
<inputtype="hidden"name="__VIEWSTATE"value="dDwtMzU5NzUyMTQ1O3Q8O2w8aTwwPjs+O2w8dDw7bDxpPDA+Oz47bDx0PDtsPG
……
伶俐的你必定会问,这是甚么?有甚么感化?它与本篇文章有何转机亲干系?列位看官,且听我渐渐道来。
实在,这就是MS在Asp.net使用ViewState手艺的特性体现。为了页面能在PostBack后仍然能读取服务器控件原本的形态数据,Asp.net中利用了ViewState手艺,而ViewState手艺实质上是用一个默许称号为"__VIEWSTATE的Hidden范例表单域来保留和传送数据(这些数据是经由了序列化后Base64编码的字符串值,且是在办法Page.SavePageStateToPersistenceMedium输入前保留、并由Page.LoadPageStateFromPersistenceMedium加载)。固然我们能够经由过程三种级别来轻松禁用失落这些数据的往复传送:
Machine级在machine.config中设置<pagesenableViewStateMac=false/>
Application级在WebApplicatin的web.config中设置<pagesenableViewStateMac=false/>
单页面级在该页面中设置<%@PageenableViewStateMac=false%>或经由过程代码设置Page.EnableViewStateMac=false;
但是,假如我们完整能经由过程禁用ViewState来办理数据传输包袱并且不发生反作用的话,那MS的架构师们也不会傻到云云心爱的境地(无关紧要的东东留它何用?),正因我们常常不克不及经由过程复杂的禁用来办理这个传输包袱成绩,以是我们只能另辟路径使之在收集往复中传输量尽量地小,因而,紧缩成了我们的首选。只需我们重载Page类的SavePageStateToPersistenceMedium()办法与LoadPageStateFromPersistenceMedium()办法,并在重载办法中对数据举行紧缩与解压的处置便可。开源项目SharpZipLib供应的类GZipInputStream与GZipOutputStream进进了我们的视野,为了便利,无妨写个类CompressionHelper,代码以下:
1usingSystem.IO;
2usingICSharpCode.SharpZipLib.GZip;
3
4namespaceYcweb.Components
5{
6/**////<summary>
7///SummarydescriptionforCompressionHelper.
8///</summary>
9publicclassCompressionHelper
10{
11publicCompressionHelper()
12{
13//
14//TODO:Addconstructorlogichere
15//
16}
17
18/**////<summary>
19///紧缩数据
20///</summary>
21///<paramname="data">待紧缩的字节数组</param>
22///<returns>紧缩后的字节数组</returns>
23publicstaticbyte[]CompressByte(byte[]data)
24{
25MemoryStreamms=newMemoryStream();
26Streams=newGZipOutputStream(ms);
27s.Write(data,0,data.Length);
28s.Close();
29returnms.ToArray();
30}
31
32/**////<summary>
33///解压数据
34///</summary>
35///<paramname="data">待解压的字节数组</param>
36///<returns>解压出的字节数组</returns>
37publicstaticbyte[]DeCompressByte(byte[]data)
38{
39byte[]writeData=newbyte[2048];
40MemoryStreamms=newMemoryStream(data);
41Streamsm=newGZipInputStream(ms)asStream;
42MemoryStreamoutStream=newMemoryStream();
43while(true)
44{
45intsize=sm.Read(writeData,0,writeData.Length);
46if(size>0)
47{
48outStream.Write(writeData,0,size);
49}
50else
51{
52break;
53}
54}
55sm.Close();
56byte[]outArr=outStream.ToArray();
57outStream.Close();
58returnoutArr;
59}
60}
61}
然后我们在派生于类Page的页面把持基类中重载办法LoadPageStateFromPersistenceMedium()与SavePageStateToPersistenceMedium(ObjectviewState),代码以下:
1Load&SaveViewStateData#regionLoad&SaveViewStateData
2protectedoverrideobjectLoadPageStateFromPersistenceMedium()
3{
4//从本人注册的埋没域__SmartViewState中读取数据
5stringviewState=Request.Form["__SmartViewState"];
6byte[]bytes=Convert.FromBase64String(viewState);
7//挪用下面供应的静态办法CompressionHelper.DeCompressByte()来解压数据
8bytes=CompressionHelper.DeCompressByte(bytes);
9LosFormatterformatter=newLosFormatter();
10returnformatter.Deserialize(Convert.ToBase64String(bytes));
11
12}
13
14protectedoverridevoidSavePageStateToPersistenceMedium(ObjectviewState)
15{
16LosFormatterformatter=newLosFormatter();
17StringWriterwriter=newStringWriter();
18formatter.Serialize(writer,viewState);
19stringviewStateString=writer.ToString();
20byte[]bytes=Convert.FromBase64String(viewStateString);
21//挪用下面供应的静态办法CompressionHelper.CompressByte()来紧缩数据
22bytes=CompressionHelper.CompressByte(bytes);
23
24//注册一个新的埋没域__SmartViewState,你也能够本人界说
25this.RegisterHiddenField("__SmartViewState",Convert.ToBase64String(bytes));
26}
27#endregion
经由以上处置,web输入页面中的源代码就是型如:
<inputtype="hidden"name="__SmartViewState"value="H4sIAPtPoNwA/81ce1PbWJb/……
<inputtype="hidden"name="__VIEWSTATE"value=""/>
本来的埋没域"__VIEWSTATE"值为空,而取而代之的是我们本人注册的新的埋没域"__SmartViewState"来存储了经由紧缩后的字符串,如许以来,提速效果是分明的,分离我们的项目,象DG3G.COM的首页原ViewState串值约莫是28K,紧缩后为7K,而Acafa.com的首页原ViewState串值约莫是43K,紧缩后为8K。如许的处置仍是对照使人中意的。固然,假如你以为还不敷完全,你还能够把ViewState串存储在Session中,不外如许做,对服务器内存的压力将陡增(特别是会见量较年夜的时分),倡议仍是不要容易利用,假如你Web服务器内存有个10G、8G的,无妨尝尝。上面给出相干修正代码:
将上述LoadPageStateFromPersistenceMedium()办法体中的代码:
stringviewState=Request.Form["__SmartViewState"];
修正为:
stringviewState=Session["__SmartViewState"].ToString();
同时,将上述SavePageStateToPersistenceMedium()体中的代码:
this.RegisterHiddenField("__SmartViewState",Convert.ToBase64String(bytes));
修正为:
Session["__SmartViewState"]=Convert.ToBase64String(bytes);
最后,以上代码和计划均来自VS2003开辟理论,对VS2005是不是符合,自己不做任何答应,不外假如你能从以上计划中有所劳绩,我将感应非常的乐意。
你可以先看看这篇文章(软微学院生涯-三朝元老经验谈),打不开再跟我说。(我的意思是想让她自己先稍微了解一下到底现在各个方向学的工具以及以后要做的工具大概是什么,因为喜欢做什么样的事其实自己最清楚的) |
|