尝试使用UDF .xll在HPC网格上并行化Excel

我正在寻找并行Excel计算HPC网格上,我使用Excel 2007,所以我试图通过在XLL的UDFmultithreading,因为它是唯一的方法(至less在2007年)。

我想在C#中编写XLL,因为这个线程暗示我可以使用exceldna 。

但我不明白我应该怎么multithreading。 在multithreading中,我是否必须在C#中重写所有的VBA函数? 我可以创build几个线程,每个线程调用一个VBAmacros?

Excel-DNA允许您可能会发现有用的不同方法:

  • 您可以将UDF标记为“线程安全”,以使用Excel对multithreading计算的支持 – 在这种情况下,Excel控制线程,并将从不同线程同时调用UDF,
  • 您可以使用Excel-DNA中的asynchronous函数 (可能使用.NET 4任务API)在网格上开始工作,并在完成后通知Excel重新计算,
  • 您可以在Excel-DNA中使用Reactive Extensions支持 ,并在Rx库上构build一个计算pipe道,
  • 您可以使用对Excel 2010中内置的Windows HPC群集的支持 ,使用Excel-DNA托pipe客户端和群集节点上的托pipe代码。

在这些情况下,调用Excel VBA都没有意义 – Excel将始终确保VBA代码在Excel的主线程上运行。

如果你的函数代码是在VBA中的,你可以考虑使用VB.NET代替你的Excel-DNA加载项 ,而不是C#,这可能会让你很容易转向.NET。 您也可以在pipe理的Excel-DNA加载项中混合使用C#和VBA。