首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

没有有关问题,散分贴:如果你必须开发交互式页面,ViewState越大可能意味着越有本事

2012-02-16 
没有问题,散分贴:如果你必须开发交互式页面,ViewState越大可能意味着越有本事如果你有一个非常酷的页面,页

没有问题,散分贴:如果你必须开发交互式页面,ViewState越大可能意味着越有本事
如果你有一个非常酷的页面,页面上很多东西自动地响应用户操作而展现丰富的变化,你的ViewState是很有可能达到200K的。

这里是我将ViewState持久化保持在服务器端的代码,这样ViewState不占用网络带宽,因此其存取只是服务器的磁盘读取时间。并且它很小,可以说是磁盘随便转一圈就能同时读取好多ViewState,因此可以说“不占时间”。为了再“不占磁盘时间”,我还使用了缓存。


一下这段代码可以放在页面中,或者页面的父类中:

C# code
protected override object LoadPageStateFromPersistenceMedium(){    var viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;    var stateStr = (string)Cache[viewStateID];    if (stateStr == null)    {        var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);        stateStr = File.ReadAllText(fn);    }    return new ObjectStateFormatter().Deserialize(stateStr);}protected override void SavePageStateToPersistenceMedium(object state){    var value = new ObjectStateFormatter().Serialize(state);    var viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码    var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);    ThreadPool.QueueUserWorkItem(obj => File.WriteAllText(fn, value));    Cache.Insert(viewStateID, value);    base.SavePageStateToPersistenceMedium(viewStateID);}


不使用Session,因为它会“丢失”。ViewState保存在磁盘上,即使服务器重新启动,也不会丢失页面状态。

下面这段可以放在Global.asax中,也可以根本不管:

C# code
protected void Application_Start(object sender, EventArgs e){    var dir = new DirectoryInfo(this.Server.MapPath("~/App_Data/ViewState/"));    if (!dir.Exists)        dir.Create();    else    {        var nt = DateTime.Now.AddHours(-1);        dir.GetFiles().ForEach(f =>        {            if (f.CreationTime < nt)                f.Delete();        });    }}


这可以确保绝对稳定可靠地工作。以后请放心使用ViewState,把交互式页面提高水平才是最重要的,不要纠缠在“ViewState太大”上。实际上,由于页面设计不够酷,交互变化看上去不够丰富,ViewState实在是太小太小了。

如果你使用了它有效提高了复杂交互页面的效率,可以说一下提高了多少?!如果你觉得没用,也可以说一下在什么情况下没用。

[解决办法]
代码有点难,我是一位刚学的新手,不过,这样的代码可能很有用
[解决办法]
深奥,看不懂
[解决办法]
放进我的网摘
[解决办法]
我也看不懂啊!
呵呵!
[解决办法]
mark
[解决办法]
mark
[解决办法]
up
[解决办法]
学习
[解决办法]
我见书上说ViewState大了影响通信量,尤其是当数据很大时候,不知道我的理解有没有错(有的书上说可以禁用不必要的ViewState)
[解决办法]
个人认为不可取,只能适合一些小型应用
[解决办法]
收藏~3Q
[解决办法]
做个记号 加入搜藏,呵呵。接分。。!!
[解决办法]
放进我的网摘
[解决办法]
记号~
[解决办法]


學習
加強
[解决办法]
学习
[解决办法]
学习
[解决办法]
mark
[解决办法]
var viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;???

var也出来了?


[解决办法]

探讨
收藏~3Q

[解决办法]
随便转转,关注一下了!
[解决办法]
应用到了一定的境界
[解决办法]
接受~
[解决办法]
vs2008 写的吧
[解决办法]
哈哈,只为接分
[解决办法]
只为学习.

哈哈.
[解决办法]
探讨
mark

[解决办法]
收藏~~
[解决办法]
ViewState越大越好?
[解决办法]
收藏~~
[解决办法]
ViewState 我看着客户端生成的源文件里一大串东东就头大..................
[解决办法]
探讨
ViewState越大越好?

[解决办法]
收藏学习
[解决办法]
学习了!
[解决办法]
学习
[解决办法]
老大 你这个 通用不行吧!!!

VAR 3.0的东西吧!

现在大多数 是2.0吧`


[解决办法]
刚试验完,真的页面上没有乱七八糟的视图状态,楼主太牛了,佩服佩服!
不过有一句代码偶尔会出错;
 string viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;
说Pair不能强制转换为string
[解决办法]
楼主很强大...

探讨
如果真是这样...那么我不敢想象4.0以上的C#语法!

[解决办法]
mark
jf
[解决办法]
oo
[解决办法]
这个还真没注意,学习
[解决办法]
mark
[解决办法]
有点意思。
[解决办法]
不是很明白
viewstate大了不是会影响浏览速度的嘛,记得以前在csdn哪篇文章说过不要用viewstate的.....
额....有点迷糊

[解决办法]
学习了,楼主好强大.
[解决办法]
做个标记!以后慢慢看,虽然不是很明白,但是要学习楼主的精神!

viewstate不知道为什么会弄到200k,我基本很少放大的东西,顶多一些id传送之类的!不知楼主应用什么东西
会+到200k,请教ing

www.54reader.com欢迎访问我的网站!谢谢
[解决办法]
有点意思~~
[解决办法]
ViewState?缓存?

500个用户在线,你的磁盘上就要放500*200K的空间.

500个用户每人一个ViewState的缓存?

何况你来回的序列化...
[解决办法]
我来学习的
[解决办法]
挺難的~~~
[解决办法]
学习
[解决办法]
mark先
[解决办法]
不错:)
[解决办法]

探讨
ViewState?缓存?

500个用户在线,你的磁盘上就要放500*200K的空间.

500个用户每人一个ViewState的缓存?

何况你来回的序列化...

[解决办法]
收藏
[解决办法]
收藏了
[解决办法]
探讨
收藏

[解决办法]
mark
[解决办法]
为了收藏。。


鼠标都滚坏了。。
[解决办法]
放进我的网摘
[解决办法]
学习。。
[解决办法]
大哥,你以前也有过几篇文章,也是给我们这些小弟灌输一些思想的,可惜我道行还太浅,不能理解你的良苦用心啊。
帮顶了。
PS:代码大部分都不懂!看来以后该好好学习了。
[解决办法]
顶,关注中。。。。。
[解决办法]
学习!!
好好的学习!!
谢谢楼主!!
[解决办法]
var? .net3.5?
[解决办法]


[解决办法]
不使用Session,因为它会“丢失”--是不是应该说你对Session不够了解,本身即可存入数据库,codeproject上也有存成文件的例子。
关于ViewState大家可以看看用 ASP.NET 2.0 改进的 ViewState 加快网站速度,他是怎么序列化的,算法的优化。
性能方面可参考Improving .NET Application Performance and Scalability
这个建议最好是在压力测试下用性能计数器等工具做个对比
[解决办法]
LZ教学习简单伪静态,油箱qpiwpp@qq.com ,谢谢谢谢
[解决办法]
学习下
[解决办法]
探讨
代码有点难,我是一位刚学的新手,不过,这样的代码可能很有用

[解决办法]
路过
------解决方案--------------------


探讨
vs2008 写的吧

[解决办法]
up。
lz,让我学到了新的知识和新的思想。谢谢

热点排行