并发和multithreadingexcel vba

所以我在网上search和大部分答案我说,Excel中没有并发。 但是有些post说EXCEL 2007提供了multithreading来加速计算。 我真的很困惑,可能吗?

在我的工作簿中,有一些单元格是使用用户定义的函数进行计算的。 这些单元格每秒通过RTD服务器更新一次。 那么这是否意味着这些函数似乎被重新计算并行,但事实上,Excel只是按顺序安排它们呢? 如果电脑有多个内核,它会有所作为吗?

如果实际上这些function是按顺序运行的话,那么下面的两个function是否相同呢? 在性能和速度方面。

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 

让我们假设所有必要的function调整。 我的意思是,第一个会更快吗?

非常感谢!!!

更新:所以如果在VBA中没有真正的并发性,那么这是否意味着函数被顺序调用,并且共享全局variables可以被访问而没有locking问题? 我有一个几乎每个函数都使用的API对象,所以我可以共享它,而不是每次使用它时初始化它? 这个对象只是一个用来调用一些静态函数的API,对象本身没有任何修改或任何东西。

是的,Excel 2007及更高版本支持使用多核心的multithreading计算,但正如Tim所说 – 不可能使用VBA编写multithreadingUDF。

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

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

Interesting Posts