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

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

#region 解决ViewState过于庞大的问题
    protected override object LoadPageStateFromPersistenceMedium()
    {
        string viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;
        string stateStr = (string)Cache[viewStateID];
        if (stateStr == null)
        {
            string 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)
    {
        string value = new ObjectStateFormatter().Serialize(state);
        string viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码
        string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
        //ThreadPool.QueueUserWorkItem(File.WriteAllText(fn, value));
        File.WriteAllText(fn, value);
        Cache.Insert(viewStateID, value);
        base.SavePageStateToPersistenceMedium(viewStateID);
    }
    #endregion

2.添加Global.asax 文件

在Global.asax文件中添加如下语句:

void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(this.Server.MapPath("~/App_Data/ViewState/"));
        if (!dir.Exists)
            dir.Create();
        else
        {
            DateTime nt = DateTime.Now.AddHours(-1);
            foreach (System.IO.FileInfo f in dir.GetFiles())
            {
                if (f.CreationTime < nt)
                    f.Delete();
            }
        }
    }
生
成,运行。查看页面源代码,有没有发现ViewState一下子不见了许多,哈哈,别着急,都在App_Data/ViewState文件下面存储着呢。
用记事本打开看看,是不是和原来页面的一模一样。通过这样的处理,我们就可以很好的解决页面由于存在ViewState,导致页面很多垃圾代码的问题,这
样对于搜索引擎是很不利的哦!

解决ViewState过于庞大的问题的更多相关文章

  1. electron 打包后node_modules 体积过于庞大

    问题产生原因:过多无用的模块被打包放入到程序中 解决: 删除 package-lock.json ,是由于这个文件导致打包时候放入过多文件,删除即可.

  2. ASP.NET与ASP.NET MVC 的差异、优点及缺点

    众所周知,在微软的编程语言发展历史中,asp.net是不得不提的一个重要的发展阶段,它具有快速开发.层级明确的优点,但最大的缺点,同时也是它逐渐被废弃的原因就是,页面加载的viewstate过于庞大, ...

  3. [java]OutOfMemoryError 原因及解决办法

    导致OutOfMemoryError异常的常见原因有以下几种: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 代码中存在死循环 ...

  4. java内存溢出的情况解决方法

    内存溢出虽然很棘手,但也有相应的解决办法,可以按照从易到难,一步步的解决. 第一步,就是修改JVM启动参数,直接增加内存.这一点看上去似乎很简单,但很容易被忽略.JVM默认可以使用的内存为64M,To ...

  5. 实战项目中Java heap space错误的解决

    部标GPS通讯系统在上线之后,经过不断调试,终于稳定运行一段时间,后来又遇到了Java heap space错误异常!日志如下: 说明系统中有未释放的对象.如何找出这些未释放对象以及监控JVM堆内存, ...

  6. 16、使用limit offset 分页时,为什么越往后翻越慢?如何解决?

    在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器哦. 当一个表数据有几百万的数据的时候成了问题! 如 * f ...

  7. java内存溢出的解决思路

    原文地址:https://www.cnblogs.com/200911/p/3965108.html 内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能 ...

  8. java内存溢出怎么解决

    java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小.程序不严密,产生了过多的垃圾. 导致OutOfMemory ...

  9. 【java虚拟机】内存溢出解决思路

    转自:https://blog.csdn.net/u013521220/article/details/79523633 内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知 ...

随机推荐

  1. redis书籍

    redis中文官网命令网址:http://doc.redisfans.com/ redis英文官网命令网址:https://redis.io/commands redis书籍 由 Karl Segui ...

  2. JavaScript Libraries In A TypeScript Application, Revisited

    If you haven’t already gotten involved with it, you’ll probably know that TypeScript is becoming inc ...

  3. VS code 格式化插件, 仅需一步, 无须配置

    1.安装Beautify 2.重启vscode后 按F1, 点击 Beautify 即可

  4. 2018 8.8 提高A组模拟赛

    T1 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x+ ...

  5. 二分查找(BinSearch)的Javascript实现

    二分查找 解析:二分查找,也为折半查找.对于一个从小到大排列的有序数组,首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边.再在两边中寻找中间值,持续以上操作,直到找到所在位置为止. 1. ...

  6. Devexpress 中控件及GridView控件的Cell增加右键复制功能

    a) GridView中任何一个Cell增加右键复制功能GridHitInfo gridHitInfo = new GridHitInfo(); //用户接收GridView中单元格数据void gr ...

  7. channel补充

    网易: package main import ( "fmt" ) func main() { var c chan int fmt.Printf("c=%v\n&quo ...

  8. 【GDOI2017 day2】凡喵识图 二进制切分

    题面 100 有一个显然的做法是\(O(n^2)\): 想办法优化这个做法: 我们给一个64位整数,切分成四个16位整数. 那么如果两个64位整数符合汉明距离为3的话,那么两者切分的四个16位整数中: ...

  9. Swift 之类的继承与类的访问权限

    http://www.cocoachina.com/swift/20160104/14821.html 上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swi ...

  10. PostgreSQL 给数组排序

    PostgreSQL 支持数组,可是没有对数据内部元素进行排序的一个函数.  今天我分别用PLPGSQL和PLPYTHONU写了一个.演示样例表结构: t_girl=# \d test_array; ...