找回密码
 立即注册

QQ登录

只需一步,快速开始

jin.ye

金牌服务用户

97

主题

207

帖子

816

积分

金牌服务用户

积分
816
jin.ye
金牌服务用户   /  发表于:2024-3-4 19:51  /   查看:2737  /  回复:10
本帖最后由 Lynn.Dou 于 2024-3-7 14:40 编辑


调研编号:DOCXLS-9963

GC打开文件极慢且极耗内存
麻烦看下什么原因导致

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

10 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-5 14:39:51
沙发
您好,
下图为我测试的导入时间,供参考。同时查看原始文件注意到有几个sheet公式较多,初步猜测可能与此有关。

需要进一步调研是否有优化的空间,待有进展贴中通知您。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
jin.ye
金牌服务用户   /  发表于:2024-3-5 14:54:03
板凳
Lynn.Dou 发表于 2024-3-5 14:39
您好,
下图为我测试的导入时间,供参考。同时查看原始文件注意到有几个sheet公式较多,初步猜测可能与此 ...

除了打开时间之外,内存也占用相当大
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-5 17:43:30
地板
信息收到,一并调研中
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-7 17:51:23
5#
更新进展:
经调研原因是原xlsx文件中 ”500万以下一次性抵扣“sheet有两个引用区域很大的条件格式,具体如下图所示:

这是造成GcExcel加载xlsx文件慢和内存占用大的主要原因。由于范围较大,GcExcel 和 MS Excel 计算都非常耗时,您可以尝试将此xlsx文件在MS Excel 本地打开,在切换至此sheet时,也会出现卡住等性能问题。
所以,建议您缩小原xlsx文件条件格式的引用区域,以避免出现此类问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
jin.ye
金牌服务用户   /  发表于:2024-3-7 19:11:42
6#
Lynn.Dou 发表于 2024-3-7 17:51
更新进展:
经调研原因是原xlsx文件中 ”500万以下一次性抵扣“sheet有两个引用区域很大的条件格式,具体 ...

业务人员上传的文件,我们无法确定,你们能否提供一个预检文件的方法,能提示文件是否存在一些不合理的地方
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-8 17:15:42
7#
这边调研一下,后续有进展在帖中再与您跟进。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-11 09:20:24
8#
感谢您的建议,目前已作为需求记录至产品需求库,如果后续有相关计划会在贴中通知您。
本贴先移至需求版本。(DOCXLS-9990)
回复 使用道具 举报
jin.ye
金牌服务用户   /  发表于:2024-3-11 10:04:03
9#
Lynn.Dou 发表于 2024-3-11 09:20
感谢您的建议,目前已作为需求记录至产品需求库,如果后续有相关计划会在贴中通知您。
本贴先移至需求版本 ...

最好能配置下参数 比如单文件GC最大使用内存多少 到了临界值后就切断了
还有单文件的加载 或者 计算 超过多少时间就不要执行了 极有可能开销过度
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-11 11:30:43
10#
您好,因为产品层在设计上不会监控内存,所以您提到的这个建议目前还不在计划内,如果后期有相关计划了,会在贴中反馈。
基于咱们贴中问题我们做了进一步的调研,原始文件中部分行高列宽信息丢失,所以在导入的时候执行了autofit进而触发了重算,导致文件加载慢。
针对open慢的问题,可以参考以下workaround方案:
  1.         // write test code
  2.         Workbook workbook = new Workbook();
  3.         long startTime = System.currentTimeMillis();
  4.         XlsxOpenOptions openOptions = new XlsxOpenOptions();
  5.         // unable the autofit.
  6.         openOptions.setDoNotAutoFitAfterOpened(true);
  7.         workbook.open("6801-0001-0001-所得税费用明细表_1.xlsx", openOptions);
  8.         long endTime = System.currentTimeMillis();
  9.         long elapsedTime = endTime - startTime;
  10.         System.out.println("打开文件花费了" + elapsedTime + " 毫秒");
复制代码

不过打开后如果做了其他操作仍可能会出现性能问题,(原因如上所述,条件格式本身引用范围过大),所以综合来看,建议从条件格式入手缩小引用范围,再结合此open过程中的workaround方案,解决此问题。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部