找回密码
 立即注册

QQ登录

只需一步,快速开始

changchao

注册会员

2

主题

5

帖子

80

积分

注册会员

积分
80

活字格认证

最新发帖
changchao
注册会员   /  发表于:2016-3-30 15:23  /   查看:5007  /  回复:6
本帖最后由 changchao 于 2016-3-30 16:54 编辑

大概700条数据分页显示,每页20条,来回多次点击各个分页后,在OnSaveOrLoadSheetState中调用SheetView.SaveViewState() 报内存溢出异常,System.OutOfMemoryException.
代码如下:
        protected void fpTemplate_SaveOrLoadSheetState(object sender, SheetViewStateEventArgs e)
        {
            Guid token = SessionManager.Instance.GetCurrentSessionToken();
            if (e.IsSave)
            {
                object data = e.SheetView.SaveViewState();
                this.Session[string.Format("C1_ViewState_{0:N}", token)] = data;
            }
            else
            {
                object data = this.Session[string.Format("C1_ViewState_{0:N}", token)];
                e.SheetView.LoadViewState(data);
            }

            e.Handled = true;
        }

6 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-3-30 17:37:57
沙发
这个需要测试下给您反馈结果。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-3-31 11:09:13
板凳
您好,你调试的时候是从哪个方法中报的错误?还有没有更多的信息可以提供,我这边还没有重现出问题。
回复 使用道具 举报
changchao
注册会员   /  发表于:2016-3-31 15:31:15
地板
dexteryao 发表于 2016-3-31 11:09
您好,你调试的时候是从哪个方法中报的错误?还有没有更多的信息可以提供,我这边还没有重现出问题。

在这句这儿报内存溢出:object data = e.SheetView.SaveViewState();
我检测了一下内存,基本上点一次分页内存消耗多一点,直到内存耗光;
然后只能重启IIS。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-4-1 13:47:39
5#
我这边反复测试没有出现内存溢出的情况,和您确认下您的
Guid token = SessionManager.Instance.GetCurrentSessionToken() 每次返回的token的值都是一样的吗?
使用相同的token 不会造成内存的快速上升。
回复 使用道具 举报
changchao
注册会员   /  发表于:2016-5-16 17:13:31
6#
抱歉现在才回复,不知为啥之前登录的时候验证码图片一直不能显示,一直没法登录。
目前我们已经把业务修改了,规避了这种情况,下面我依然说明一下我们遇到内存溢出的情况:
我们的情况是:大概有2000条数据,每条数据有二三十个字段,页面上每个单元格都是根据数据类型创建不同的CellType,并且会有一些计算公式验证逻辑等,根据需要,要把所有数据都加载到内存。在这样的情况下,打开一个页面服务器要耗费至少300M的内存。多点几次分页会出现内存溢出,甚至有时第一次打开直接报内存溢出。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-5-16 17:32:03
7#
感谢您的反馈,我再根据您的描述进行测试,看能否重现问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部