找回密码
 立即注册

QQ登录

只需一步,快速开始

wanghaibo
论坛元老   /  发表于:2014-9-28 09:40  /   查看:6562  /  回复:6
1.
首先我们用ReportXML字段存储SPREAD的单元格样式,此字段的数据类型是BLOB,这个ReportXML字段存储的容量是很大的,导致首先SELECT语句会在先这个地方卡住。
SELECT MenuID,ReportID,ReportName_C,ReportName_E,ReportName_V,ReportDateTimeType,ShiftTypeFlag,GroupsFlag,ReportEditerFlag,ReportEditDateTimeFlag,ReportAuditerFlag,ReportAuditDateTimeFlag,ReportEditBar,ReportXML,ReportVersion,VersionEditFlag ,ReportIndexDateTimeType,ReportDateTimeStyle,ReportSize FROM (SELECT MenuID,ReportID,ReportName_C,ReportName_E,ReportName_V,ReportDateTimeType,ShiftTypeFlag,GroupsFlag,ReportEditerFlag,ReportEditDateTimeFlag,ReportAuditerFlag,ReportAuditDateTimeFlag,ReportEditBar,ReportXML,ReportVersion,VersionEditFlag ,ReportIndexDateTimeType,ReportDateTimeStyle,ReportSize   FROM MD_TB_01020100_REPORTLIST  WHERE MenuID=01020100 and VersionEditFlag=0 and ReportVersion <= TO_DATE('2014/8/27','YYYY-MM-DD')  ORDER BY ReportVersion DESC ) WHERE ROWNUM=1

2.
当将ReportXML字段保存到实体类_reportListEntity.ReportXML后,SPREAD加载单元格样式,继续卡住。
#region  显示报表单元格样式
                try
                {
                    MemoryStream smc = new MemoryStream(_reportListEntity.ReportXML);//HY-定义内存流,XML是二进字内存流形式
                    this.fspMain.Open(smc);  //加载样式信息
               
                  smc.Close();
                }
                catch
                { }

6 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2014-9-28 13:42:00
沙发
wanghaibo 你好,

问题一:
将Spread存为XML之后以BLOB保存在数据库,根据Spread样式的复杂程度不同,存储的XML大小也不尽相同,仅从加快SQL语句执行效率考虑,我的建议是单独创建一个数据表,该表只存放SpreadXML,可以包含两个字段ID和ReportXML,当我们需要加载ReportXML时再通过ID查询一次数据库。
这样做的原因是,我们在很多情况下我们只需要获取Spread模板的名称、修改历史等数据,而是不需要先返回ReportXML的,这样既能加快SQL执行速度,又内降低对内存的使用。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2014-9-28 13:52:00
板凳
问题二:
我想首先的看一下Spread保存为XML之后的文件大小,比如是K级别还是M级别的大小。
同时,在做Spread模板设计的时候也需要注意尽量不要插入图片对象,这会导致模板大小增加。

从Spread使用效率来看,有以下值得注意的地方:
在循环语句中尽量使用SetValue()/SetText(),而不是直接使用Value和Text。
回复 使用道具 举报
wanghaibo
论坛元老   /  发表于:2014-9-28 13:56:00
地板
回复 2楼dof的帖子

这样做的原因是,我们在很多情况下我们只需要获取Spread模板的名称、修改历史等数据,而是不需要先返回ReportXML的,这样既能加快SQL执行速度,又内降低对内存的使用?????

那我不select  ReportXML那个列不就完了!!!!
回复 使用道具 举报
wanghaibo
论坛元老   /  发表于:2014-9-28 14:00:00
5#
回复 2楼dof的帖子

现在的情况,我就是要返回ReportXML,按照你说的速度是否会加快???
你说的:这样做的原因是,我们在很多情况下我们只需要获取Spread模板的名称、修改历史等数据,而是不需要先返回ReportXML的,这样既能加快SQL执行速度,又内降低对内存的使用。
那我select 的时候把那列去除不就完了??????????
回复 使用道具 举报
wanghaibo
论坛元老   /  发表于:2014-9-28 14:02:00
6#
回复 3楼dof的帖子

M级别的
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2014-9-28 17:46:00
7#
那我不select  ReportXML那个列不就完了!!!!
是的,可以这么实现。
但你就是需要直接返回ReportXML,目前没有更直接的解决方法。如果你可以提供重现该问题的示例,可以发给我们,我们可以看看模板本身是否可以减小体积。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部