VSTO加载项与VBA性能

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

取决于这些程序做什么,以及他们如何做。

VSTO /.net比VBA更快,可以编写在多个线程上运行的代码。 但是Excel是COM,最终所有东西都需要进入STA(单线程公寓)pipe道,并且通过COM Interoppipe理(.net)代码与COM进行通信,即通过主互操作程序集与Excel进行通信,这比“原生“VBA。

换一种说法:

  • 你的程序做了很多处理,很less有电子表格读/写,去VSTO。
  • 你的程序做了很多的电子表格交互,去VBA。 电子表格交互几乎是VBA可以做的最慢的事情,但用VSTO做它们会更加痛苦,因为所有事情都需要从托pipe代码编组到COM。

最好的可能是一个混合的解决scheme:在VBA中暴露用户定义的函数,并将VBA代码调用成一个引用的COM可见的.net DLL,即使没有使用Excel互操作程序集,也可以执行实际的计算。

写得好的VBA代码也可以胜过同等的VSTO代码。

考虑到我需要在VBA中执行的比较函数的数量,我开始认为插件可能更合适。

您也可以在VBA中编写Excel加载项。 所涉及的技术越less,彼此谈话所需的就越less; 在一天结束的时候,它是多less重要性之间的平衡,你可以根据你的要求,环境和经验的不同而有所不同。

  • 性能 – 哪个解决scheme效果最好?
  • 可维护性 – 哪种解决scheme最容易维护?
  • 部署 – 哪种解决scheme最容易更新和部署?
  • 源代码pipe理 – Visual Studio挂钩团队挫折基础服务器和Git; VBE可以用Rubberduck (我的一个小宠物项目)做Git,但最新的版本仍然是beta版本,并且有点不稳定(尽pipe它是开源的,所以如果你知道C#,你可以贡献并帮助稳定它)。
  • unit testing – Visual Studio可以轻松编写和运行unit testing; VBE可以和Rubberduck一样,但是如果没有VBE插件,你不得不求助于临时testing,或者启用对VBIDE API的编程访问,并使用基于VBA的unit testing框架。