请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Andy.C

注册会员

10

主题

38

帖子

116

积分

注册会员

积分
116
Andy.C
注册会员   /  发表于:2023-11-16 14:51  /   查看:207  /  回复:19
1金币
代码如下:

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

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

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

19 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-16 18:23:04
沙发
本帖最后由 Richard.Ma 于 2023-11-16 18:32 编辑

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

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

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


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

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

我们发现一个workBook对象越用越慢。  因此才做了这个测试。发现确实如此。越往后 wk.DeferUpdateDirtyState = false越慢。  
你可以不跑满100次,10几20次就能发现时间越来越长
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-16 18:33:03
地板
本帖最后由 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
好的,这边还得做一下验证,周一给您结果

是否有结论了?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-20 15:21:42
10#
本帖最后由 Richard.Ma 于 2023-11-20 15:36 编辑

现在的情况是,如果我不加载你发过来的这个ssjson,即使测试10W次,性能也不会有变化
image.png748783874.png

但是如果加载了以后,基本上完全就没法执行,一次循环就需要2分多钟,和你描述的情况完全不一样。
image.png634067382.png


你看看是否还是做一个demo出来,我帮你看看




1700465262229.png480769652.png
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部