缓存ViewState减少网络传输
在维护 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减少网络传输的更多相关文章
- 洛谷 P2558 [AHOI2002]网络传输
P2558 [AHOI2002]网络传输 题目描述 在计算机网络中所有数据都是以二进制形式来传输的. 但是在进行较大数据的传输时,直接使用该数的二进制形式加以传输则往往传输的位数过多. 譬如要传输 1 ...
- [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
[转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...
- 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造
在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...
- PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性
关系数组 array("key"=>"value",...) ; get没有数据大小的限制 post上传大小没有限制 不指定上传方式,默认是get 文件上 ...
- web性能优化-网络传输性能优化
浏览器工作原理:https://www.cnblogs.com/thonrt/p/10008220.html 浏览器渲染原理: https://www.cnblogs.com/thonrt/p/100 ...
- Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案
本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...
- udp 视频包网络传输花屏
视频数据传输在传输层可以选择TCP或者UDP,TCP面向连接,传输中断,发送端是知道的.TCP传输的好处是不丢包,坏处是网络不太好的情况下会越堵越严重.UDP非面向连接,发送端只管发送数据,接收端有没 ...
- App安全之网络传输安全
移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...
- 解决TCP网络传输“粘包”问题
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...
随机推荐
- Bugku-CTF之sql注入2 (全都tm过滤了绝望吗?)
Day 38 sql注入2 200 http://123.206.87.240:8007/web2/ 全都tm过滤了绝望吗? 提示 !,!=,=,+,-,^,%
- maven 项目搭建
转自:https://www.cnblogs.com/lzx2509254166/p/7674455.html Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软 ...
- 思科ACS的性能总结
ACS Performance & Scale 思科ACS目前还能支持的可能就是ACS5.8版本了,该版本也将于2020年停止支持,关于ACS信息会逐步退出大家的视野.该文档是Cisco论坛t ...
- jvm字节码助记符
反编译指令 javap -c xxxx.class JVM参数设置 -xx:+<option> 开启option -xx: -<option> ...
- Centos6.10-FastDFS-Storage-Nginx配置
nginx+fastdfs-nginx-module 安装此处省略. 1.进入工作目录 cd /usr/local/nginx/conf 2.创建子目录 mkdir configs 3.创建stora ...
- php 基础 二维数组以某个重复值累加
$arr = array( array('id' => 123, 'name' => '张三', 'amount'=>'1'), array('id' => 123, 'nam ...
- Windows系统重装记录
材料: u盘(需4g以上) windows官方镜像 附:windows个版本比较 步骤: u盘格式化(为了装启动盘系统需要清空数),备份系统盘所需要的的数据 下载适合自己的官方镜像,可从该网站下载(官 ...
- JS高级---工厂模式创建对象和自定义构造函数创建对象的区别
创建对象:工厂模式和自定义构造函数的区别 共同点: 都是函数, 都可以创建对象, 都可以传入参数 区别: 工厂模式: 函数名是小写 有new, 有返回值 new之后的对象是当前的对象 直接调用 ...
- 【C语言】创建一个函数,将输入的2个数排序
#include <stdio.h> void fun(int *x,int*y) { int t; if(*x>=*y) { t=*x;*x=*y;*y=t; } } main() ...
- 洛谷 P2239 螺旋矩阵(模拟 && 数学)
嗯... 题目链接:https://www.luogu.org/problem/P2239 这道题首先不能暴力建图,没有简单方法,只有进行进行找规律. AC代码: #include<cstdio ...