关闭

ASP.NET内存占用问题

542人阅读 评论(0) 收藏 举报
原来写过的一部分ASP.NET的页面用于数据的选择,也就是把符合条件的记录都显示出来,由用户选择其中的一条。为了加快速度,所有符合条件的数据取出后放在了Session中,分页查找时直接取这个数据就可以了。一直运行的很正常(呵呵,可能是也不正常,只不过没有看出来),后来换了一个数据量比较大的系统,选择几次数据后内存占用竟然到了1个多G,最终造成内存超过极限进程崩掉了。
  百思不得其解,数据是保存在Session中的,退出的时候也根据相关的Key值清除了,应该会释放掉了。但是即使我加了强制回收垃圾代码也不管用。
  没办法,读代码吧,反正知道是在哪部分出的问题。发现产生了一个新的Table用于分页,然后这个Table绑定了自定义的DataGrid并且也放到了Session中,这部分是DataGrid管理的,退出时没有清除。但是这个Table中仅有10行数据(默认的),并且同一个用户打开同一个选择会冲掉以前的缓存,所以不应该出现这么大的内存占用啊。
  只好在缓存的数据做文章了。缓存的是一个DataView(实际是一个DataTable的DefaultView),来点狠的,退出页面时调用CacheData.Table.Clear()清除掉DataTable中的数据,然后CacheData.Dispose(),再用原来的处理清除其他Session中缓存的数据(几个标志,成不了什么气候),顺手在DataGrid中增加方法清除掉缓存,然后强制回收垃圾,运行、测试,查看内存,哈哈,一直稳定在40~50M之间啊。
  俺的机器不行,太大的数据查询造成连接超时,换到了服务器上的正式系统中,打开多个IE访问、测试,基本稳定在了300M左右。成功!
  有必要的话,太大的对象不使用了最好还是显示清除一下好。因为这部分代码写的比较早,想到.NET应该可以自动回收,所以当时根本没有在意这个问题。 想想写这些代码的时候还是比较弱啊 :D  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59192次
    • 积分:1286
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:7篇
    • 译文:0篇
    • 评论:12条
    优化蜘蛛引导