设为首页收藏本站

LUPA开源社区

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

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

2014-6-30 14:52| 发布者: joejoe0332| 查看: 3619| 评论: 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>



酷毙

雷人

鲜花

鸡蛋

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

最新评论

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

返回顶部