VSTO 加载项与 VBA 性能对比

VSTO Add-in vs. VBA Performance

如果您要编写功能相同的程序,我很好奇两者的性能比较。我正在做一个项目,在这个项目中,考虑到我需要在 VBA 中执行的比较函数的数量,我开始认为插件可能更合适。

取决于这些程序做什么以及它们是如何做的。

VSTO /.net 比 VBA 更快,并且允许您在多个线程上编写 运行 的代码。但是 Excel 是 COM,最终一切都需要进入 STA(单线程单元)管道,托管 (.net) 代码通过 COM Interop 与 COM 对话,即它通过 Excel 对话 主要互操作程序集比"native"VBA.

换句话说:

  • 您的程序进行了大量处理,但很少处理电子表格 reads/writes,使用 VSTO。
  • 您的程序会进行大量电子表格交互,请执行 VBA。电子表格交互几乎是 VBA 可以做的最慢的事情,但是使用 VSTO 进行它们会更加痛苦,因为所有内容都需要从托管代码编组到 COM。

最好是混合解决方案:在 VBA 中公开用户定义的函数,然后将 VBA 代码调用到引用的 COM 可见 .net DLL 中,该 DLL 甚至无需进行实际计算使用 Excel 互操作程序集。

编写良好的 VBA 代码也可以胜过等效的 VSTO 代码。

I'm beginning to think that an addin may be more appropriate given the volume of compare functions I'm needing to do in VBA.

您也可以在 VBA 中编写一个 Excel 插件。涉及的技术越少,他们之间交流的需求就越少;归根结底,这是您对许多事情的重视程度之间的平衡,根据您的要求、环境和经验,可能会有不同的应用:

  • 性能 - 哪个解决方案性能最好?
  • 可维护性 - 哪个解决方案最容易维护?
  • 部署 - 哪个解决方案最容易更新和部署?
  • Source Control - Visual Studio 挂钩到 Team Frustration Foundation Server 和Git; VBE 可以用 Rubberduck 做 Git(我的一个小宠物项目),但最新版本仍然是测试版并且有点不稳定(虽然它是开源的,所以如果你知道 C# 你可以贡献并帮助稳定它)。
  • 单元测试 - Visual Studio使编写和运行单元测试变得容易; VBE 可以对 Rubberduck 做同样的事情,但是如果没有 VBE 加载项,您将不得不求助于临时测试,或者启用对 VBIDE API 的编程访问并使用基于 VBA单元测试框架。