设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

利用View State缓存优化ASP.NET性能

2014-6-30 14:52| 发布者: joejoe0332| 查看: 3621| 评论: 0|原作者: petert|来自: oschina

摘要: 简介ASP.NET的视图浏览机制提供了客户端的管理方式.它能够保存请求过程中的所有数据. 这对于无状态显示的协议编程如HTTP提供了方便.ASP.NET的 View State被保存在页面上隐藏的Base64字符串中, 它记录了客户端到服务 ...

简介

ASP.NET的视图浏览机制提供了客户端的管理方式.它能够保存请求过程中的所有数据. 这对于无状态显示的协议编程如HTTP提供了方便.

ASP.NET的 View State被保存在页面上隐藏的Base64字符串中, 它记录了客户端到服务器的请求以及服务端到客户端的回应信息.

<input id="__VIEWSTATE" type="hidden"name="__VIEWSTATE"value="/wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kFgQCAQ9kFgICBQ9kFgJmD2QWAgIBDxYCHhNQcm2aW91c0NvbnRyb2xNb2RlCymIAU1pY3Jvc29mdC5TaGFyZVBvaW50LldlYkNvbnRyb2xzLlNQQ29udHJbE1vZGUsIE1pY3Jvc29mdC5TaGFyZVBvaW50LCBWZXJzaW9uPTEyLjAuMC4wLCBDdWx0dXJlPW5ldXRyWwsIFB1YmxpY0tleVRva2VuPTcxZTliY2UxMTFlOTQyOWMBZAIDD2QWDgIBD2QWBgUmZ19lMzI3YTQwMF83ZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD2RkZAUmZ18yNDQ3NmI4YV8xY2FlXzRmYTVfOTkxNl8xYjIyZGYwNmMzZTQPZBYCZg8PZBYCHgVjbGFzcwUbbXMtc2J0YWJsZWFsdCBtcy1zYnRhYmxFlOTQyOWMBZAIDD2YjIyZGYjIyZGYjIyZGlYkNvbnRyb2xzLlNQQ29YkNvbnRyb2xzLlNQQ2UxMTFlOTQyOWMBZAIDD2QWDgIBD2QWBgUmZ19lMzI3YTQwMF83ZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD...==" />

图 1:  ASP.NET View State示例


ASP.NET View State面临的问题

ASP.NET View State有一些问题你得明了. 一旦这些问题解决了,就能更好的使用这一特性.具体如下

1. ASP.NET View State数据量较大

首先说的是,viewstate的数据量很大,尤其是页面包含大量的控制件或是富文本内容.这在客户端和服务器往来通信中就会产生很多数据.

就是因为这一原因,它会造成你的ASP.NET应用性能下降.在使用过程中就能体会到这一点

另一个问题就是带宽占用. 这就关系到钱的问题了,如果viewstate的带宽上限是10m/s,当面令数百万的请求处理时就会显得力不从心了.

2. ASP.NET View State 有安全隐患

ASP.NET View State在发送机密数据到客户端时会有泄密危险. 数据有可能被截获. 当然可以再次加密后发送,但还是会影响到性能.

 ASP.NET View State 的应对方法

解决 ASP.NET View State上述问题的一个方法就是给每一个数据加上唯一标示(或是ID).之后通过这个标示来查找相应的回复.

这么做的原理就是,viewstate只会把数据保存到服务端而不会放在浏览器. 所以对于浏览器来说不管是标示还是ID都无所谓. 下面就是个例子.

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"     value="vs:cf8c8d3927ad4c1a84da7f891bb89185" />

图2: 字符串中的token

但如果在集群的环境上使用viewstate,下一次的请求可能会发送到另一台服务器上. 因此,需要把数据保存到所有服务器都能访问到的公共存储机上.

保存数据的最好地方就是分布式的缓存区. 这样,不但能实现公用的服务器存储,更能体现出相比SQLserver服务器更优的性能和伸缩性.

图 3: 分布式缓存 ASP.NET View State

NCache 是.NET平台一个分布式缓存. 它也能帮助解决上面提到的viewstate的问题.

NCache怎么用 ?

NCache 无需更改ASP.NET应用的代码就能实现分布式缓存. 可以按照下面的步骤来实现.

Step 1: App_browsers 创建app.browser文件. 在app.browser添加page adapters  :

File: App_browsers\app.browser<browser refID="Default">   <controlAdapters>      <adapter controlType="System.Web.UI.Page"               adapterType="Alachisoft.NCache.Adapters.PageAdapter" />   </controlAdapters></browser>

Step 2: web.config 文件中添加相关引用:

File: web.config<compilation defaultLanguage="c#" debug="true" targetFramework="4.0">    <assemblies>        <add assembly="Alachisoft.NCache.Adapters, Version=1.0.0.0,             Culture=neutral, PublicKeyToken=CFF5926ED6A53769"/>    </assemblies></compilation>

Step 3:  在 web.config 注册NCache.

File: web.config<configSections>    <sectionGroup name="ncContentOptimization">        <section name="settings"            type="Alachisoft.NCache.ContentOptimization.Configurations.ContentSettings"            allowLocation="true" allowDefinition="Everywhere"/>    </sectionGroup></configSections>

Step 4:  web.config 文件中修改相关配置(上面注册过的部分). 它们控制 NCache ASP.NET View State 缓存功能.

File: web.config<ncContentOptimization>    <settings viewstateThreshold="12" enableViewstateCaching="true"     enableTrace="false" groupedViewStateWithSessions="false">        <cacheSettings cacheName="myCache" maxViewStatesPerSession="3">            <expirationtype="Absolute" duration="1" />        </cacheSettings>    </settings></ncContentOptimization>

Step 5:最后在web.config 注册 HTTP handler:

File: web.config<httphandlers>    <add verb="GET,HEAD" path="NCResource.axd" validate="false"        type="Alachisoft.NCache.Adapters.ContentOptimization.ResourceHandler,         Alachisoft.NCache.Adapters, Version=1.0.0.0, Culture=neutral,         PublicKeyToken=cff5926ed6a53769"/></httphandlers>




在服务端缓存 ASP.NET View State的好处

在服务端使用NCache缓存 ASP.NET View State 的好处如下 .

  1. 提高ASP.NET 性能 现在只需要发送一个小小的token而无需viewstate的原生数据. 这能减少数据量提升性能.

  2. 降低带宽花费: 数据量小了也节省了很多带宽流量.能省不少钱

  3. 安全性: 现在ASp.NET的viewstate字符串无需发送到浏览器端了,也就没有安全隐患了.

  4. ASP.NET View State 存储更快速更具有延展性: NCache 是很快速具有延展性的分布式缓存.这就解决了ASP.NET的瓶颈问题.

  5. ASP.NET View State可靠性提高: NCache 会智能复制相关的数据.意味着即使缓存服务器当掉,也不会丢失先关数据

NCache中的 ASP.NET View State高级特性  

NCache提供了很多管理ASP.NETviewstate高级特性.列表如下

  1. 最小单元: NCache可以标注 ASP.NET View State的最小数据单元. 小于这一熟知的数据不会保存. 这样就只会保存重要的数据.

  2. ASP.NET View State连接会话状态: 你可以连接viewstate到当前的会话上.这样会话结束后,缓存数据就会消失

  3. 页面数据上限单元: 你可以控制好在一个先进先出环境中页面将要保存的数据最大单元数. 这样只会保存到最新的数据单元. 这就更好的管理了内存的使用情况,只提供给最需要的数据保存.

  4. 会话数据上限单元: 和页面类似,也可以指定会话的数据单元上限. 这就保存的是最近的数据单元.

  5. 页面和会话级别设置: 可以分别设置每个页面或会话属性.亦或是全部使用相同的配置

结论

正如你所见,缓存ASP.NETviewstate属性提供了很多很棒的特性,也提升了应用的性能. 它也帮助你节省了不少带宽费用. 最重要的是,解决了数据发送至浏览器的安全问题.

如果你在使用 ASP.NET View State 最好将其缓存至服务端. 为此你也最好看看Ncache.更详细的介绍在这http://www.alachisoft.com

作者

Iqbal Khan 是 Alachisoft (http://www.alachisoft.com)的技术专家. Alachisoft 为.NET平台提供分布式缓存NCache. Iqbal1990年从印第安纳大学获得计算机科学硕士学位,可以通过邮箱联系他 iqbal@alachisoft.com.


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部