2

私は、最新の(ベータ版ではない)Visual Studio 2008 SP1で何が起こっているのかを理解しようと、頭を悩ませてきました。

OpenMPで構築された私のアプリは、デバッガーで非常に遅く実行され、CPU使用率が100%になります。それらがデバッガーの外部で実行される場合、それは単にゆっくり実行されます(リリースビルドの場合)。

Intel Thread Building Blocksライブラリを使用してビルドされたアプリ、または独自のスレッドチームの実装は、デバッガーの外部で実行する場合(リリースビルドの場合)よりもデバッガーでの実行が遅くなります。

SP1がインストールされていない他の開発マシンに行くと、状況が異なります。デバッガー内または外部で実行しても、プログラムのパフォーマンスには影響しません。OpenMPは、スレッドビルディングブロックまたは私自身のスレッドチームコード(この問題を理解するために憤慨して急いで書かれた)と同様に、私のアプリケーションを加速します。

これは、アプリにまったく変更を加えずに、デバッガーSP1と通常のVisualStudioの内部または外部で実行するだけです。

私はグーグルでこれについて何も見つけられなかったので、私は首を突き出して、誰かがこれが彼らに起こっていることを認識するかもしれないことを期待して何かを言っています。それか、私は物事を見ています。

4

1 に答える 1

2

はい。場合によっては。SP1に切り替えた後、非常に遅くなるという同様の状況が発生しました。この原因は例外でした。ディクショナリ内のキーにアクセスしようとして失敗し、例外をキャッチするというパターンを多用したデータモデルがありました。

try {
  var a = dict[key];
} catch(KeyNotFoundException) {
  dict[key] = default;
  a = default;
}

これは単なる例ですが、原因はまったく例外でした。何らかの理由で、デバッガーのみの VS は非常に低速です。これは以前のケースでしたが、新しいパッチでは大幅に悪化していることに注意してください。

解決策は、単純に常にテストを使用することです。上記の辞書の例では、.TryGet を使用するか、カスタム コードで呼び出し前に例外が生成されるかどうかをチェックします。 .

詳細:例外とパフォーマンス

于 2009-09-03T00:14:25.703 に答える