vba - 加速计算
问题描述
有了大约 20K 的观察结果,以下代码需要大约 7.5 秒才能运行
'Remember time when macro starts
StartTime = Timer
For i = 2 To UBound(avTransposed, 2)
For J = 1 To UBound(avTransposed, 1)
k = IIf(J = 1, k + 1, k)
' If J = 1 Then k = k + 1
ReDim Preserve TrueUsedRangeArray(1 To Dim2, 1 To k)
TrueUsedRangeArray(J, k) = avTransposed(J, i)
Next
Next
'Determine how many seconds code took to run
SecondsElapsed = Round(Timer - StartTime, 2)
如果没有 k = IIf(J = 1, k + 1, k)行(或 If J = 1 Then k = k + 1),只需不到一秒!
任何想法?
解决方案
ReDim Preserve 可能正在扼杀性能。每次使用时,它都会创建一个新数组并将现有数组复制进去。
您可以预先计算 TrueUsedRangeArray 的大小,如下所示
ReDim TrueUsedRangeArray(1 To Ubound(avTransposed, 2), 1 To Ubound(avTransposed, 1))
推荐阅读
- angular - Gridster2 anf jsPDF 不工作,不给我所有的组件 - 角度
- c++ - 带有链表的 C++ 队列
- solr - 上下文查询中 solr dockerSuggester 的问题:未正确处理空白
- amazon-web-services - 在 aws cloudformation 中设置全局参数
- java - 如何在 Java DocumentBuilder 中解析 XSD 文件期间将元素附加到现有节点列表
- javascript - 如何获取出现在特定元素之后的所有特定元素
- csv - 在 PyQGIS QGIS 3.10 中从 CSV 加载点图层
- c# - 为什么我的 web api 在 C# 中使用 https 而不是 http
- swift - 结合预取和缓存结果
- youtube-dl - 最佳音频和视频质量在 youtube-dl 中不起作用