VBA 与 Visio 中的 C# 速度测试

VBA vs C# Speed Test in Visio

我想知道是否有人对如何在 C# 中加速 Visio 项目的自动化有任何提示。我拥有的自动化设备是建造厕所隔间。我最终选择制作 10 个摊位,VBA 大约需要 3 秒来制作所有形状。

我刚刚使用 Microsoft.Office.Interop.Visio 库将 VBA 转换为 c# 表单应用程序。做同样的测试,需要 14 秒。

通过使 visio 应用程序不可见然后在完成后使其可见,我已经能够起飞 3 秒,但这仍然与 VBA 的效果相去甚远。

我注意到在 C# 中,我可以看到 visio 绘图以每个形状构建自身,而在 VBA 中却看不到。所以我也尝试使用:"Application.ScreenUpdating"。在 c# 中,它需要一个短数据类型,所以为了使它为 false,我尝试将它设为 0,但它什么也没做。我还尝试使用 "True" 在 VBA 中打开它,但没有打开它。

还有更多关于加快速度的技巧吗?我很惊讶 VBA 比 C# 更快(可能是因为它内置于 Office 套件中)。

首先,您无法在最佳方面击败 VBA...就像 Hans Passant 所写的那样,您在互操作性方面损失了很多。特别是如果是进程外调用,这会比进程内VBA调用慢很多倍。 插件会有所帮助(代码将 运行 进行中),但 VBA 仍然会更快,因为您仍然有互操作性(假设 dotnet 插件 - Visio 是一个本机应用程序,所以您将无论如何都有 COM 互操作)

选项一是在 vba 中完成。大多数人选择它。意味着您忘记了 c# 和您的 windows 表单应用程序。

选项二是最小化互操作(最小化 Visio 调用的数量)。 另外,这里有一些提示 https://blogs.msdn.microsoft.com/mailant/2004/09/22/dev-luv-visio-development-top-five-performance-tips/

尽管其中大多数都适用于 vba 和 c#。反正你也赢不了 vba,即使你全部都跟着。请注意,如果您遵循它们,您可以使 VBA 代码更快。

另一种选择是在没有 Visio 的情况下生成 Visio 文件(如打开 xml)。这样,您就可以击败 VBA 性能。但是你需要写的代码量可能是VBA的20倍,而且你需要知道一些visio区间。