この記事は、Windows 10 または Microsoft .NET Framework 4.7.1 にアップグレードした後、 System.Diagnostics.StackFrame
を使用するアプリケーションの実行速度が以前よりも遅くなる問題を解決するのに役立ちます。
適用対象: Windows 10 バージョン 1803、Windows 10、バージョン 1709
元の KB 番号: 4057154
現象
2017 年 10 月以降、Windows 10 または .NET Framework 4.7.1 にアップグレードした後、 System.Diagnostics.StackFrame
クラスを使用する .NET Framework アプリケーションを実行すると、パフォーマンスが大幅に低下します。
アプリケーションは通常、.NET 例外をスローするときに StackFrame
に依存します。 これが高いレート (1 秒あたり 10 件を超えるインシデント) で発生した場合、アプリケーションの速度が大幅に低下し (10 倍)、実行速度が以前よりも著しく遅くなる可能性があります。
Windows のバージョンを確認するには、「 Windows オペレーティング システムが実行されている場合」を参照してください。
解決方法
この問題は、次の Windows 更新プログラムで修正されています。
Windows 10 バージョン 1709 の場合
サポートされているその他すべての Windows バージョン
この問題を回避するには、以下のいずれかの方法を使用します。
回避策 1 (推奨): ブール値引数を受け取る StackFrame に別のコンストラクターを使用する
アプリケーション開発者がアプリケーションに変更を加えることができる場合は、ソース情報をキャプチャしないように false 引数を使用して System.Diagnostics.StackTrace.#ctor(Boolean)
コンストラクターを呼び出します。 これにより、パフォーマンスが低下するコードのセクションが回避されます。
回避策 2: システム バージョンをロールバックする
システムを以前のバージョンの Windows 10 または .NET Framework にロールバックします。 これを行うには、以下の手順を実行します。
以前のバージョンの Windows 10 にロールバックする方法
Settingsを開き、 Update & Securityを選択し、 Recoveryを選択します。
[ 以前のバージョンの Windows 10 に戻るで、 Get started を選択します。
ロールバックする理由を選択し、 次へを選択します。
[ いいえ、更新プログラムのインストールをスキップするには に感謝します。
[次へを 2 回選択し、前のビルドに戻りますを選択します。
これらの手順を完了すると、Windows 10 によって以前のバージョンのシステムが復元されます。
以前のバージョンの .NET Framework にロールバックする方法
Windows 7 SP1 および Windows Server 2008 R2 SP1 の手順:
コントロール パネルで Programs and Features 項目を開きます。
プログラムのインストールまたは変更一覧で、microsoft .NET Framework 4.7.1 を見つけて選択し、Uninstall/Change を選択します。
このコンピューターから Remove .NET Framework 4.7.1 を選択し次 へを選択します。
Continueを選択してアンインストールを確定します。
アンインストールが完了した後Finish を選択します。
これを行うメッセージが表示されたら、コンピューターを再起動します。
Note
.NET Framework 4.7.1 をアンインストールした後、コンピューターに .NET Framework 4 のバージョンがインストールされなくなりました。 .NET Framework 4 のバージョンを再インストールする必要があります。
Windows 8.1、Windows Server 2012、Windows Server 2012 R2、および Windows 10 バージョン 1607 の手順:
コントロール パネルで Programs and Features 項目を開きます。 これを行うには、Search ボックスに「appwiz.cpl」と入力します。
インストールされている更新プログラムの表示を選択します。
Windows のバージョンに応じて、次のいずれかの項目を右クリックし、[ Uninstallをクリックします。
- Windows Server 2012: Update for Microsoft Windows (KB4033345)
- Windows 8.1 または Server 2012 R2: Update for Microsoft Windows (KB4033369)
- Windows 10 バージョン 1607: Update for Microsoft Windows (KB4033369)
[ Yes をクリックしてアンインストールを確認します。
これを行うメッセージが表示されたら、コンピューターを再起動します。
詳細
特定のアプリケーションがスローする .NET 例外の数の詳細については、「 Exception パフォーマンス カウンターを参照してください。
アプリケーションの例外率を測定する方法の詳細については、「 Runtime プロファイリングを参照してください。
Note
この問題では、スローされる例外の数は変更されません。 ただし、これらの例外を処理するアプリケーションの機能が大幅に低下します。 この問題の詳細については、こちらの GitHub 投稿を参照してください。
IKVM ライブラリを使用するアプリケーションは、アセンブリをプローブする場合、この問題の影響を受けることがわかっている。 アセンブリのプローブでは、例外が発生することがわかっています。