首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Scripting.Dictionary的性能替代方案

基于Scripting.Dictionary的性能替代方案
EN

Stack Overflow用户
提问于 2017-10-30 16:21:52
回答 1查看 1.3K关注 0票数 0

我正在用Excel编写一个带有几个按钮的Manager .

其中之一是使用另一个Excel文件(我称之为T)作为输入生成一个选项卡。

T的一些性质

  • ~90MB大小
  • ~350K线
  • 包含sales上一个14月份的数据(无序)。
  • 相关栏目:
    • year/month
    • 总金额
    • 卖方-名称
    • 家族产品
    • 客户名称

  • 没有id列(例如: cod-client、cod-卖主等)

主要关系:

  • 销售商向许多客户销售许多产品。

我正在生成一个新的Excel选项卡,其数据来自按卖方分组的最后一个year/monthyear/month的数据。

重要说明:

  • T是唯一可用的输入/源。
  • 如果两个或多个销售商将同一产品出售给同一客户端,则应将total-money计算给所有这些销售者。

这就足够了,现在您已经知道了已经编码了什么

我的代码可以工作,但是,它需要大约4分钟的运行时间。

我已经使用更小的源代码(不大于2MB)编写了其他一些按钮,后者在5秒内运行。

考虑到T大小,4分钟运行时是可以接受的。

但我对此并不感到骄傲,至少现在还没有。

我的代码主要基于Scripting.DictionaryT映射数据,然后使用for each key in obj ... next key将分组数据设置为新创建的选项卡。

我不确定,但以下是我的想法:

  • 如果NScripting.Dictionary中的总键,那么在聚合total-money之前,我需要检查obj.Exists(str)。它将运行N字符串,比较返回false
  • 类似地,当我执行N时,它将运行最大的Set seller = obj(seller_name)字符串。

我想让我的想法出错。但是,如果我没有错,我的下一步(也是最后的希望)减少这个函数的运行时,就是用Tries编写我自己的类对象。

我只会在明天开始编码,我想要的只是一些确认如果我是正确的方式,或一些建议,如果我是在错误的方式做它。

你有什么意见建议?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-09-30 10:22:26

我相信你已经找到了正确的解决方案,因为过去两年没有任何更新。

无论如何,我想提一提(也许这会对其他人有所帮助),您的瓶颈不是字典或二叉树。即使有数百万行,如果您有足够数量的RAM,内存中的处理速度也会非常快。

botlleneck通常是从工作表读取数据并将其写回工作表。在这里,数组非常用户满。

只需将数据从工作表读入变体数组即可。你不需要马上处理这个数组。如果您使用字典更舒服,只需将数组中的所有数据转换为字典并使用它即可。由于这个过程完全是在内存中完成的,所以不要担心性能的不利影响。

完成字典中的数据处理后,将字典中的所有数据放回数组中,并一次性将该数组写入新的工作表中。

工作表(新工作表).Range(“A1”).Value= MyArray

我很确定这只需要几秒钟

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47019932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档