【发布时间】:2013-01-18 15:05:24
【问题描述】:
所以我在网上搜索,我得到的大多数答案都说 Excel 中没有并发。但是有些帖子说 EXCEL 2007 提供了多线程以加快计算速度。我真的很困惑,这可能吗?
在我的工作簿中,有一些单元格是使用用户定义的函数计算的。这些单元每秒通过 RTD 服务器更新一次。那么这是否意味着这些函数看起来是并行重新计算的,但实际上 Excel 只是按顺序调度它们呢?计算机是否具有多个内核是否会有所不同?
如果事实上这些函数是按顺序运行的,那么下面两个是等价的吗?在性能和速度方面。
1)
cell1 = userFunc(1, switch1)
cell2 = userFunc(2, switch2)
cell3 = userFunc(2, switch3)
和 2)
cell = func()
where func() is
public function
if(switch1) call userfunc1
if(switch2) call userfunc2
....
end function
让我们假设对功能进行了所有必要的调整。我的意思是,第一个会更快吗?
非常感谢!!!
更新:如果 VBA 中没有真正的并发性,这是否意味着函数被顺序调用并且共享全局变量可以在没有锁定问题的情况下访问?我有一个几乎每个函数都使用的 API 对象,所以我可以共享它而不是每次使用它时都对其进行初始化吗?这个对象只是一个用来调用一些静态函数的API,对象本身没有任何修改或任何东西。
【问题讨论】:
-
Excel 必须将函数视为线程安全的,才能利用并行化,而 VBA UDF 不属于该类别。但是,如果您的 UDF 不是在 VBA 中定义的,那么它们可能是候选对象。请参阅此处了解完整的运行情况:msdn.microsoft.com/en-us/library/office/…
-
与 C# 或 Java 一样,在 VBA 中您没有线程库或以这种方式限定函数。 VBA 不支持多线程。如果您真的需要执行多线程,就像 Tim 指出的那样,请使用
interop调用 COM-able 应用程序来实现您所需要的。但我会发现它有问题 - 而是在另一个应用程序层中编写整个程序,以便能够使用多线程。 stackoverflow.com/questions/14143328/…
标签: multithreading excel vba concurrency