2017-10-25 10 views
0

누구나 C#의 Visio 프로젝트에서 자동화 속도를 높이는 방법에 대한 정보가 있으면 궁금합니다. 내가 가지고있는 자동화는 화장실 마루를 짓고 있습니다. 결국 10 개의 노점을 만들기로 선택하고 VBA는 모든 모양을 만들기 위해 약 3 초가 걸립니다.VBA vs C# Visio의 속도 테스트

Microsoft.Office.Interop.Visio 라이브러리를 사용하여 VBA를 C# 양식 응용 프로그램으로 마무리하는 작업 만 완료했습니다. 같은 테스트를하려면 14 초가 걸립니다.

Visio 응용 프로그램을 보이지 않게하고 3 초 후에 Visible 응용 프로그램을 볼 수있게 만들었지 만 VBA와는 거리가 멀어졌습니다.

저는 C#으로 알아 봤습니다. VBA에서는 각 모양을 가진 Visio 드로잉 자체를 볼 수 있지만 그렇지 않습니다. 그래서 나는 또한 사용하려고 시도했다 : "Application.ScreenUpdating". C#에서는 짧은 데이터 형식을 사용하므로 false로 만들고 0으로 만들려고했지만 아무 것도하지 않았습니다. 또한 VBA에서 "True"를 사용하여 켜기를 시도했지만 켜지지 않았습니다.

이제 더 빨리 만들 수있는 팁이 있습니까? 나는 VBA가 C#보다 빠르다는 것에 놀랐다. (어쩌면 Office Suite에 내장되어 있기 때문일 수도있다.)

+2

Visio 프로세스 내부에서 실행되는 코드는 절대로 성공할 수 없습니다. WinForms 프로젝트는 프로세스 경계를 ​​넘고 두 개의 스레드 컨텍스트 스위치가 필요하다는 근본적인 비용으로 인해 항상 어려움을 겪을 것입니다. 매우 간단한 프로퍼티 getter는이 오버 헤드로 인해 약 10,000x 느리게 실행됩니다. interop 멤버가 힘이들 때 훨씬 적은 상처를 입습니다. 비교할 수있는 코드를 작성하려면 추가 기능을 만들어야합니다. –

+0

이것은 VBA 질문이 아닙니다. VBA 태그를 삭제하십시오. – jsotola

+2

프로그래밍 방식으로 마스터를 드롭하면 dropmany 명령을 사용할 수있어 많은 시간을 절약 할 수 있습니다. 현재 지오메트리를 그리는 경우 마스터를 사용하려면 창의력을 발휘해야 할 수도 있습니다. –

답변

1

처음에는 VBA를 가장 잘 처리 할 수 ​​없습니다. 한스 패전트 (Hans Passant)처럼 Interop에서 많이 느슨합니다. 특히 out-of-process 호출 인 경우에는 in-process VBA 호출보다 여러 번 느려질 수 있습니다. Addin이 도움이 될 것입니다. (코드가 진행될 것입니다.)하지만 VBA는 여전히 더 빠릅니다. interop (dotnet add-in을 가정하면 Visio가 네이티브 앱이므로 어쨌든 COM interop를 사용하게됩니다.)

옵션 하나는 vba에서 수행하는 것입니다. 대부분의 사람들이 그것을 선택합니다. 당신은 C#과 윈도우 폼 애플리케이션을 잊어 버렸다는 것을 의미합니다.

옵션 2는 interop (Visio 호출 수 최소화)를 최소화하는 것입니다. 또한 여기에 몇 가지 힌트가 있습니다. https://blogs.msdn.microsoft.com/mailant/2004/09/22/dev-luv-visio-development-top-five-performance-tips/

대부분은 vba와 C#에 모두 적용됩니다. 그리고 비록 당신이 모두를 따라 간다 할지라도, 당신은 어쨌든 vba를 이길 수 없을 것입니다. VBA 코드를 따르는 경우 VBA 코드를 훨씬 빠르게 작성할 수 있습니다.

또 다른 옵션은 Visio없이 Visio 파일을 생성하는 것입니다 (예 : open xml). 이를 통해 VBA 성능을 능가 할 수 있습니다. 그러나 작성해야 할 코드의 양은 VBA보다 20 배 이상 많으며 일부 visio 간격을 알아야합니다.

+0

설명해 주셔서 감사합니다. 그건 의미가 있습니다. 네, 저는 XML에 대해 생각했지만 그것은 악몽이 될 것입니다. 퍼포먼스는 내 매니저보다 더 괴롭 힙니다. 그는 실제로 그것이 스스로를 지켜 보는 것을 즐깁니다. 커다란 문제가된다면 v # 메소드를 호출하기 위해 C#에서 함수를 사용할 것입니다. C#을 사용하는 이유는 회사의 소프트웨어를 사용하여 읽기 쉽고 사용하기 쉽도록 만드는 것입니다. 링크 주셔서 감사합니다! – jediderek