2017-10-25 36 views
0

C#でVisioプロジェクトの自動化を高速化する方法についてのヒントがありますか?私が持っているオートメーションはトイレの屋台を建てることです。私は10の屋台を作ることを選ぶことになり、VBAはすべての形を作るのに約3秒かかります。VisioでのVBAとC#のスピードテスト

Microsoft.Office.Interop.Visioライブラリを使用して、VBAをC#フォームアプリケーションに変換するだけで済みます。同じテストを行うには、14秒かかります。

私はvisioアプリケーションを不可視にして、それを完了後に見えるようにすることで3秒ほどかかることがありましたが、それでもVBAに近いものではありません。

私はC#に気付きました。私はVBAの中ではそれぞれの図形を使ってVisio図面の構築自体を見ることができます。だから私はまた、 "Application.ScreenUpdating"を使って試しました。私はそれを0にしようとしたが、それは何もしなかったので、C#でそれは短いデータ型を取ります。また、私は "真"を使用してVBAでそれを有効にしようとしましたが、それをオンにしませんでした。

これ以上の情報をもっと速くするためのヒントはもうありませんか?私はVBAがC#より高速であることに驚いています(Officeスイートに組み込まれている可能性があります)。

+2

* Visioプロセス内で*実行されるコードは決して勝てません。 WinFormsプロジェクトは、プロセスの境界を越えて2つのスレッドコンテキストスイッチを必要とするという基本的なコストによっていつも打ち勝ちます。非常に単純なプロパティゲッターは、このオーバーヘッドのために約10,000倍遅く実行されます。 interopメンバーが疲れている場合は、それほど痛いことはありません。比較可能なコードを作成するには、アドインを作成する必要があります。 –

+0

これはVBAに関する質問ではありません。 VBAタグを削除してください。 – jsotola

+2

マスターをプログラムでドロップすると、dropmanyコマンドを使用することができ、それによって多くの時間を節約できます。現在、ジオメトリを描画している場合は、マスターを使用するために創造的にする必要があります。 –

答えて

1

まず、あなたは最高のものでVBAを打つことはできません...ハンス・パサントのように、interopで多くのことをやっています。特に、アウトオブプロセスコールの場合、インプロセスVBAコールよりも何倍も遅くなります。 Addinが助けになります(コードはインプロセスで実行されます)が、VBAはまだまだ高速ですが、interop(ドットネットアドインを前提としています。Visioはネイティブアプリなので、 )

オプション1はvbaで行います。ほとんどの人がそれを選ぶ。あなたはC#とあなたのWindowsフォームアプリケーションについて忘れていることを意味します。

オプション2はinterop(Visio呼び出しの最小数)を最小限に抑えることです。 また、いくつかのヒントがあります。 https://blogs.msdn.microsoft.com/mailant/2004/09/22/dev-luv-visio-development-top-five-performance-tips/

これらのほとんどはvbaとc#の両方に適用されますが、そして、あなたがそれらのすべてに従っても、あなたはvbaをとにかく打ち負かすことはありません。あなたがそれらに従うならば、VBAコードをもっと速くすることができます。

もう1つのオプションは、VisioなしでVisioファイルを開くxmlとして生成することです。これにより、VBAのパフォーマンスを上げることができます。しかし、あなたが書く必要があるコードの量はおそらくVBAの20倍以上になり、いくつかのvisio間隔を知る必要があります。

+0

ありがとうございます。それは理にかなっている。いや私はXMLについて考えましたが、それは悪夢です。パフォーマンスは私のマネージャーよりも気になります。彼は実際に自分自身を構築するのを楽しんでいます。大きな問題になった場合は、vbaメソッドを呼び出すためにC#の関数を使用します。 C#の理由は、当社のソフトウェアでより読みやすく、使いやすくするためです。リンクもありがとう! – jediderek

関連する問題