找回密码
 立即注册

QQ登录

只需一步,快速开始

Andy.C

注册会员

16

主题

62

帖子

186

积分

注册会员

积分
186
Andy.C
注册会员   /  发表于:2023-11-16 14:51  /   查看:5292  /  回复:20
1金币
本帖最后由 Richard.Huang 于 2023-12-28 16:41 编辑

产品:GcExcel
版本:V4.2

代码如下:
  1. IWorkbook wk = new Workbook();
  2. wk.Options.Formulas.EnableIterativeCalculation = false;
  3. var json = File.ReadAllText("d:\\temp\\6fed6435-b289-45ce-aa32-57f42b535d4a.ssjson");
  4. wk.FromJson(json);


  5. Stopwatch stopwatch = new Stopwatch();
  6. for (int i = 0; i < 100; i++) {
  7.     stopwatch.Start(); // 开始计时
  8.     wk.DeferUpdateDirtyState = true;
  9.     wk.Worksheets["去化及回款规则"].Range["L11"].Value = 0.33;
  10.     // 执行需要监控性能的代码块
  11.     wk.DeferUpdateDirtyState = false;
  12.     Console.WriteLine($"Elapsed Time: {stopwatch.Elapsed}");
  13.     stopwatch.Reset(); // 停止计时
  14. }
复制代码
越往后的写何解入性能越差,何解?

6fed6435-b289-45ce-aa32-57f42b535d4a.zip

10.56 MB, 阅读权限: 150, 下载次数: 2

最佳答案

查看完整内容

经后续调研,此问题是存在于V4版本,在V6版本中已经修复。解决这个问题请升级版本即可

20 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-16 14:51:41
来自 21#
经后续调研,此问题是存在于V4版本,在V6版本中已经修复。解决这个问题请升级版本即可
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-16 18:23:04
2#
本帖最后由 Richard.Ma 于 2023-11-16 18:32 编辑

测试发现即使是1次循环也没有跑完,所以还没有重现你说的情况

把这个文件导出成了xlsx,基本上也卡的动不了,这个之前是如何编辑的呢

这个是你这边的实际业务场景吗,还是测试的数据


回复 使用道具 举报
Andy.C
注册会员   /  发表于:2023-11-16 18:29:25
3#
Richard.Ma 发表于 2023-11-16 18:23
测试发现即使是1次循环也没有跑完,所以还没有重现你说的情况

这个是你这边的实际业务场景吗,还是测试 ...

我们发现一个workBook对象越用越慢。  因此才做了这个测试。发现确实如此。越往后 wk.DeferUpdateDirtyState = false越慢。  
你可以不跑满100次,10几20次就能发现时间越来越长
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-16 18:33:03
4#
本帖最后由 Richard.Ma 于 2023-11-16 18:34 编辑

关键是你为什么要用wk.DeferUpdateDirtyState呢,而且是每次都设置,理论上来说并不会提高速度

如果是为了禁止中间的重复计算,应该在循环前关闭计算引擎
回复 使用道具 举报
Andy.C
注册会员   /  发表于:2023-11-16 18:40:49
5#
image.png219341735.png
明显越后面的时间越长
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-17 09:31:43
6#
主要是你发我给我的文件目前一次也跑不动了。是不是和你那边的测试环境有点不一样。你能加载发的这个文件试试吗
回复 使用道具 举报
Andy.C
注册会员   /  发表于:2023-11-17 09:38:41
7#
本帖最后由 Andy.C 于 2023-11-17 09:41 编辑
Richard.Ma 发表于 2023-11-17 09:31
主要是你发我给我的文件目前一次也跑不动了。是不是和你那边的测试环境有点不一样。你能加载发的这个文件试 ...

您建立一个.net控制台程序,运行我发出来的代码在控制台就可以输出了,不需要转成xlsx.
设置wk.DeferUpdateDirtyState  是因为真实的业务是一次保存多个值,需要setValue前关闭DeferUpdateDirtyState ,设置完之后再开启DeferUpdateDirtyState  。 来达到提升性能的目的。
https://gcdn.grapecity.com.cn/showtopic-143102-1-1.html
原理如上

这个测试demo只是模拟一次保存一个值而已

回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-17 18:04:54
8#
好的,这边还得做一下验证,周一给您结果
回复 使用道具 举报
Andy.C
注册会员   /  发表于:2023-11-20 11:05:43
9#
Richard.Ma 发表于 2023-11-17 18:04
好的,这边还得做一下验证,周一给您结果

是否有结论了?
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部