在维护 asp.net webform系统时,某些系统将控件及页面数据都存储在viewstate中,导致在频宽不够时,影响页面加载速度,此时可将viewstate 存储在服务端,减少网络传输。

重写 LoadPageStateFromPersistenceMedium SavePageStateToPersistenceMedium 即可,但是在实际使用中,如用户并发量太大不建议这样使用,会影响整个系统的运行状况,可有选择的选择某些重要的页面集成基类,处理viewstate 。

public class ViewStateCache
{
public string filename { set; get; }
public string Key { set; get; }
public string Value { set; get; } public static Queue<ViewStateCache> ViewStateQueue = new Queue<ViewStateCache>(); public static void RegisterViewStateQueue()
{
ThreadPool.QueueUserWorkItem(o =>
{
while (true)
{
try
{
if (ViewStateQueue.Count > 0)
{
ViewStateCache vcache = ViewStateQueue.Dequeue();
if (vcache != null)
{
File.WriteAllText(vcache.filename, vcache.Value);
}
}
else
{
Thread.Sleep(1000);
}
}
catch (Exception ex)
{
Log.Witer(ex.ToString());
}
}
});
}
} public class CachePageModel : System.Web.UI.Page
{
protected override object LoadPageStateFromPersistenceMedium()
{
if (LocalBaseInfoService.IsPriorityCacheViewState())
{
string viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second; var stateObject = Cache[viewStateID];
if (stateObject != null)
{
RedisHelper.Hash_SetExpire(viewStateID, DateTime.Now.AddSeconds(5));
Cache.Remove(viewStateID);
return stateObject;
} string stateStr = ""; string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
stateStr = File.ReadAllText(fn); if (!string.IsNullOrEmpty(stateStr))
{
return new ObjectStateFormatter().Deserialize(stateStr);
}
else
{
return base.LoadPageStateFromPersistenceMedium();
} }
else
{
return base.LoadPageStateFromPersistenceMedium();
}
} protected override void SavePageStateToPersistenceMedium(object state)
{
if (LocalBaseInfoService.IsPriorityCacheViewState())
{
string viewStateID = "viewstate" + Request.Url.AbsolutePath.ToString().Replace("\\", "-").Replace("/", "-") + Guid.NewGuid().ToString(); Cache.Insert(viewStateID, state);
string value = new ObjectStateFormatter().Serialize(state); string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID); ViewStateCache.ViewStateQueue.Enqueue(new ViewStateCache() { Key = viewStateID, Value = value, filename = fn }); base.SavePageStateToPersistenceMedium(viewStateID); }
else
{
base.SavePageStateToPersistenceMedium(state);
}
}
}

  

缓存ViewState减少网络传输的更多相关文章

  1. 洛谷 P2558 [AHOI2002]网络传输

    P2558 [AHOI2002]网络传输 题目描述 在计算机网络中所有数据都是以二进制形式来传输的. 但是在进行较大数据的传输时,直接使用该数的二进制形式加以传输则往往传输的位数过多. 譬如要传输 1 ...

  2. [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    [转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...

  3. 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造

    在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...

  4. PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性

    关系数组 array("key"=>"value",...) ; get没有数据大小的限制 post上传大小没有限制 不指定上传方式,默认是get 文件上 ...

  5. web性能优化-网络传输性能优化

    浏览器工作原理:https://www.cnblogs.com/thonrt/p/10008220.html 浏览器渲染原理: https://www.cnblogs.com/thonrt/p/100 ...

  6. Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案

    本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...

  7. udp 视频包网络传输花屏

    视频数据传输在传输层可以选择TCP或者UDP,TCP面向连接,传输中断,发送端是知道的.TCP传输的好处是不丢包,坏处是网络不太好的情况下会越堵越严重.UDP非面向连接,发送端只管发送数据,接收端有没 ...

  8. App安全之网络传输安全

    移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...

  9. 解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

随机推荐

  1. thinkphp一些经常用到的标签

    volist标签(用于模板中的数组循环输出) //length:循环多少次 {volist name='list' id='vo' length='4'} <span>{$vo.name} ...

  2. springboot12(rabbitmq)

    RabbitAutoConfiguration @Configuration @ConditionalOnClass({ RabbitTemplate.class, Channel.class }) ...

  3. go语言 二叉树

    package main import ( "fmt" "reflect" ) type BinaryNode struct { Data interface{ ...

  4. IntelliJ IDEA 2017.3尚硅谷-----界面展示

  5. Apollo安装教程

    最近一直在研究Apollo的安装问题,浪费了几天时间,所有特意来记录一下安装心得. UBUNTU 14.04安装 这个我是把自己的笔记本全部转换为ubuntu系统,操作相对简单,大家可以自行查找,另外 ...

  6. C语言随笔5:函数、函数指针

    函数 C语言中函数参数传递时,将实参的值拷贝到函数参数的存储区中.这种传递参数的方式称为按值传递. 函数不会访问实参本身,访问的是函数存储在栈区的副本,不会改变实参.函数凋用结束,函数在栈区的内容释放 ...

  7. 7_4 素数环(UVa524)<回溯法和生成-测试法的比较>

    有一个环(ring)是由n个圈圈所组成的(在这里n一定是个偶数),我们想要把1到n的自然数各放到一个圈圈中,使得相邻2个圈圈中的数的和一定是素数.下图为n=6的情形.请注意:第1个圈圈中的数一定是1. ...

  8. DataGridView编辑后立即更新到数据库的两种方法

    DataGridView控件是微软预先写好的一个显示数据的控件,功能非常强大,可以显示来自数据库表的数据和XML等其他来源的数据. 方法一:基于DataAdapter对象创建一个CommandBuli ...

  9. sqli-libs(42-45(post型)关)

    Less_42 查看源代码,可以看到password没有经过mysqli_real_escape_string()函数进行处理,所以这个时候我们在这个位置进行构造 使用admin 111111进行登录 ...

  10. 关于java中MD5加密(可直接使用)

    本文转自:http://www.cnblogs.com/solove/archive/2011/10/18/2216715.html 上部分是转载的关于字符串的加密,后半部分则比较全,包括字符串.文件 ...