我想知道是否有人在C#中如何加快Visio项目的自动化速度。我的自动化是建立厕所。我最终选择制作10个档位,VBA需要大约3秒才能完成所有形状。
我刚刚使用Microsoft.Office.Interop.Visio库将VBA转换为c#表单应用程序。要进行相同的测试,需要14秒。
通过使visio应用程序不可见,然后在完成后使其可见,我已经能够取消3秒钟,但这仍然不及VBA所做的那样。
我注意到C#我可以看到每个形状的visio绘图构建本身,而在VBA中它没有。所以我也尝试使用:" Application.ScreenUpdating"。在c#中它需要一个简短的数据类型,所以为了使它为假,我试着把它设为0,它什么也没做。我还尝试使用" True"在VBA中打开它。但那并没有打开它。
那么关于加快速度的更多提示呢?我很惊讶VBA比C#更快(也许是因为它内置于Office套件中)。
答案 0 :(得分:1)
首先,你不能以最好的方式击败VBA ......就像Hans Passant写的那样,你在互操作上失去了很多。特别是如果它是进程外调用,这将比进程内VBA调用慢很多倍。 Addin会有所帮助(代码将在进程中运行),但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文件(作为open xml)。有了它,你可以击败VBA表现。但是你需要编写的代码量可能是VBA的20倍,而且你知道一些visio间隔。