【发布时间】:2018-04-07 03:41:09
【问题描述】:
我想知道是否有人对如何在 C# 中加速 Visio 项目中的自动化有任何提示。我拥有的自动化是建造厕所隔间。我最终选择制作 10 个档位,VBA 大约需要 3 秒来制作所有形状。
我刚刚使用 Microsoft.Office.Interop.Visio 库将 VBA 转换为 c# 表单应用程序。做同样的测试,需要 14 秒。
通过使 visio 应用程序不可见,然后在其完成后使其可见,我已经能够起飞 3 秒,但这仍然与 VBA 所做的相距甚远。
我注意到在 C# 中我可以看到 visio 绘图以每个形状构建自己,而在 VBA 中却没有。所以我也尝试使用:“Application.ScreenUpdating”。在 c# 中,它需要一个短数据类型,所以为了使它为假,我尝试将其设为 0,但它什么也没做。我也尝试在 VBA 中使用“True”打开它,但没有打开它。
那么还有更多关于让它更快的提示吗?我很惊讶 VBA 比 C# 更快(可能是因为它内置在 Office 套件中)。
【问题讨论】:
-
您永远无法击败在 Visio 进程内部运行的代码。 Winforms 项目总是会因必须跨越进程边界和需要两个线程上下文切换的基本成本而受到重创。由于这种开销,一个非常简单的属性 getter 的运行速度大约慢了 10,000 倍。当互操作成员很强壮时,它的伤害要小得多。您必须创建一个加载项才能创建可比较的代码。
-
那么这不是 VBA 问题。请删除 VBA 标签。
-
如果您以编程方式删除母版,您可以使用 dropmany 命令,这样可以节省大量时间。不过,如果您目前只是在绘制几何图形,则可能需要发挥创造力才能使用母版。