1

所以我在网上搜索,我得到的大多数答案都说 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,对象本身没有任何修改或任何东西。

4

1 回答 1

1

是的 Excel 2007 及更高版本支持使用多个内核的多线程计算,但正如 Tim 所说 - 使用 VBA 编写多线程 UDF 是不可能的。

为了获得良好的 UDF 性能,您确实需要使用 XLL 接口并利用多线程。

您可以使用 Excel DNA(免费)或 Addin Express(收费)在 .NET C# 或 VB.Net 中创建多线程 XLL UDF。
VSTO 不支持 UDF,.Net 自动化 UDF 非常慢
对于 C++ XLL UDF,我推荐 Planatech XLL+。

于 2013-02-04T10:55:33.110 回答