小编Yug*_*orf的帖子

Excel中的多线程计算速度很慢

我想知道是否有任何方法可以控制excel计算,以使WB中的几张纸并行地重新计算,而其他的则没有。我的问题是,在当前设置下,我拥有的顺序计算过程花费的时间太长。该序列是从VBA驱动的,如下所示:1)vba调用一个插件(excel-dna vb.net插件,它控制数据读取器和附加的数据库)2)插件将数据返回到工作表1。重新计算工作表2-3按顺序(第2页,然后3)3)第4至10页是按顺序重新计算的,但是由于每个独立地仅链接到第2页,因此理论上它们可以并行地重新计算-对吗?但是该怎么做呢?4)通过1)中所述的vba addin调用新数据再次开始过程

在笔记本电脑上运行数据的子集(64位,32位excel,intel i7)需要54.6秒。有趣的是,如果我关闭多线程,则需要25.8秒!而且,如果我在超高速计算机(2 x Intel Xeon X5570,四核“ Nehalem”架构,64位和64位excel)上运行它,它的速度比我的笔记本电脑还要慢,多线程处理需要230秒,而无线程处理则需要26秒。

我想知道是否有更好的方法可以利用多核和多线程。慢位似乎是excel重新计算,而不是加载速度。任何建议表示赞赏。

编辑:上面的描述有点简化-实际上,我还有一个迭代的“ calc / paste-vales / recalc”过程,该过程在工作表4-10上运行(迭代一直进行到达到所需的灵敏度为止,然后才算出整张纸)。我认为这使得在当前设计下运行wb计算不可行。

表格4-10相同(除了硬编码的输入参数外),彼此之间没有计算依赖性。如果每个的计算过程(提到的迭代过程和工作表计算)可以并行执行而不是顺序执行,我认为整个过程将会更快。

仅供参考,我已经进行了更明显的简化和测试(分解公式,分离易失函数等)。

在整个过程中运行我的整个数据集大约需要16个小时,这就是为什么我渴望找到一些改进方法。

谢谢!

architecture excel performance multithreading

5
推荐指数
1
解决办法
2万
查看次数

在.net4中使用带有dbnull值的datareader

我听说框架4中有一个字段扩展方法允许一个接收来自datareader的空值,而不必经过第一次测试的过程,如果不是null然后......等等.这里有关于扩展方法的信息(MSDN)),但我不知道如何在代码中使用它(相对较新的.net和以前从未使用过的扩展方法).如果有人能举一个例子,我将不胜感激.

这是我试图实现的,但是当在任一列中返回dbnull时它会返回错误.

Reader.Read()
Dim Val As Nullable(Of Double) = Reader.GetDecimal(0)
Dim Vol As Nullable(Of Long) = Reader.GetInt32(1)
Run Code Online (Sandbox Code Playgroud)

.net dbnull field datareader vb.net-2010

3
推荐指数
1
解决办法
2471
查看次数