Windows 10 および .NET Framework の4.7.1 での System.diagnostics.stackframe のパフォーマンスの低下

現象

2017年10月以降、Windows 10 または .NET Framework 4.7.1 にアップグレードした後、 system.diagnostics.stackframeクラスを使う .net Framework アプリケーションを実行すると、パフォーマンスが大幅に低下していることがわかります。

通常、アプリケーションは .NET の例外をスローしたときにsystem.diagnostics.stackframeを利用します。 これが高料金で発生する場合 (1 秒あたり10件を超える場合)、アプリケーションは大幅に遅く (tenfold)、以前よりも著しく遅く動作する可能性があります。

Windows のバージョンを確認するには、「どの windows オペレーティングシステムが実行されていますか? 」を参照してください。

解決方法

この問題は、次の Windows 更新プログラムで修正されています。

Windows 10 バージョン1709の場合

2018 年 2 月 1 日 — KB4058258 (OS ビルド 16299.214)

サポートされているその他の Windows バージョンの場合

.NET Framework 4.7.1 Update (KB4054856)

回避策

この問題を回避するには、以下のいずれかの方法を使用します。

方法 1 (推奨)

ブール型の引数を受け取る System.diagnostics.stackframe には、別のコンストラクターを使います。

アプリケーション開発者がアプリケーションに変更を加えることができる場合は、false 引数を使用して#ctor StackTrace (ブール値)コンストラクターを呼び出して、ソース情報のキャプチャを回避します。 これにより、パフォーマンスが低下するコードのセクションが回避されます。  

方法 2

システムバージョンをロールバックする

以前のバージョンの Windows 10 または .NET Framework にシステムをロールバックします。 これを行うには、次の手順を実行します。

以前のバージョンの Windows 10 にロールバックする方法

  1. [設定] を開き、[更新 & セキュリティ]、[回復] の順に選択します。

  2. [以前のバージョンの Windows 10 に戻す] で [はじめに] を選びます。 Windows 以前のバージョンに戻すの 10 の回復に

  3. ロールバックの理由を選択し、[次へ] を選択します。 Windows 10 回復はなぜ戻って

  4. [更新プログラムのインストールをスキップします] を選択します。

  5. [次へ] を2回選択し、[以前のビルドに戻る] を選択します。

これらの手順を完了すると、Windows 10 によって以前のバージョンのシステムが復元されます。

Windows の以前のバージョンを復元します。

以前のバージョンの .NET Framework にロールバックする方法

Windows 7 SP1 および Windows Server 2008 R2 SP1 の手順

  1. コントロールパネルの [プログラムと機能] 項目を開きます。

  2. [プログラムのアンインストールまたは変更] ボックスの一覧で、[ Microsoft .net Framework 4.7.1] を探して選択し、[アンインストールと変更] を選択します。 Windows 7 SP1 および Windows Server 2008 R2 SP1 では、.Net Framework 4.7.1 をアンインストールします。

  3. [このコンピューターから .Net Framework 4.7.1 を削除する] を選択し、[次へ] を選択します。 .NET Framework 4.7.1 をこのコンピューターから削除します。

  4. [続行] を選択してアンインストールを確定します。

  5. アンインストールが完了したら、[完了] を選択します。 4.7.1 の.NET Framework がこのコンピューターから削除されました

  6. 画面の指示に従って、コンピューターを再起動します。

注: .net framework 4.7.1 をアンインストールすると、コンピューターには .net framework 4 のバージョンがインストールされなくなります。.NET Framework 4 のバージョンを再インストールする必要があります。

Windows 8.1、Windows Server 2012、Windows Server 2012 R2、Windows 10 バージョン1607の手順

  1. コントロールパネルの [プログラムと機能] 項目を開きます。 これを行うには、検索ボックスに「 appwiz 」と入力します。

  2. [インストールされた更新プログラムの表示] を選びます。 インストールされている更新プログラムを表示 - Windows 8.1、Windows Server 2012 の、Windows Server 2012 R2 および Windows 10

  3. 使用している Windows のバージョンに応じて、次のいずれかの項目を右クリックし、[アンインストール] をクリックします。

    • Windows Server 2012: Microsoft Windows 用更新プログラム (KB4033345)

    • Windows 8.1 または Server 2012 R2: Microsoft Windows の更新プログラム (KB4033369)

    • Windows 10 バージョン 1607:Microsoft Windows 版更新プログラム (KB4033369)

  4. アンインストールを確認するには、[はい]をクリックします。

  5. 画面の指示に従って、コンピューターを再起動します。

詳細情報

特定のアプリケーションによってスローされる .NET 例外の数について詳しくは、「例外のパフォーマンスカウンター」をご覧ください。

アプリケーションの例外の速度を測定する方法について詳しくは、「実行時のプロファイリング」をご覧ください。

注: この問題では、スローされる例外の数は変更されません。 ただし、これらの例外を処理するアプリケーションの能力が大幅に低下します。 この問題の詳細については、 GitHub 投稿を参照してください。

IKVM ライブラリを使用するアプリケーションは、アセンブリをプローブすると、この問題の影響を受けることがわかっています。 アセンブリを調査することは、例外の原因となることがわかっています。

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

フィードバックをお送りいただきありがとうございます!

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×