1

ワークシートを開くたびに読み込まれる特定の関数のパフォーマンスを調整するように依頼されました(したがって、処理が遅くならないことが重要です)。この関数を遅くしているように見えることの1つは、データベース(リモート)への長い呼び出しを行うことですが、他にもたくさんの可能性があります。これまでのところ、私はコードをステップスルーしてきましたが、何かがチューニングの候補としてそれをメモするのに長い時間がかかるように思われるとき。

どの通話が私を遅くしているのかをより客観的に知る方法が欲しいのですが。タイミングとVBAを検索すると、基本的に「カウンターを作成し、クリティカルセクションのいずれかの側で開始および停止する」(多くの場合、明示的に呼び出されるマクロを使用)という結果になります。(デバッガーで)「次の行にステップして、経過時間を教えて」のような方法があるかどうか疑問に思いました。

そうでない場合、誰かが私が求めているものを取得するためにイミディエイトウィンドウで使用できる合理的なマクロを提案できますか?具体的には、(Googleで見つけたプロシージャ全体を一度に実行するのではなく)より大きなプロシージャ内で任意のコード行の時間を計測できるようにしたいと考えています。

4

1 に答える 1

3

さらに検索するためのキーワードは、VBAの「プロファイラー」を探すことです。VBWatchとVBACodeProfiler System(VBACP)、およびStephen BullのPerfMonについて聞いたことがありますが、後者を除いて、ほとんど無料ではありません。

これまでのところ、私の答えの公式の部分については、おそらく役に立たない提案の観点からいくつかの余分なものを投げます:「人間の測定」(行を実行して「うわー、それは永遠にかかる」と言う)によって「遅い」コードを識別するデバッガーは確かに役立ちます、そしてあなたはそれからそれらが遅い理由を調べ始めることができます。大量のデータを送信する必要がある場合、リモートデータベース呼び出しにかなりの時間がかかることがあります。その場合、データを取得する前に、両端のデータにタイムスタンプを付け、データが変更されたかどうかをDBに確認することをお勧めします。シートへのデータの書き込みは、書き込み方法によっては遅くなる場合があります。これは、何らかの形式の反復ではなく、範囲に配列を書き込むことで改善できる場合があります。そして、私はおそらくScreenUpdatingやEnableEventsなどについてあなたに話す必要はありませんか?

于 2012-10-10T09:54:32.973 に答える