Ask CORE

Microsoft Japan Windows Technology Support

DWM が有効である環境において、多数の子ウィンドウを抱えるウィンドウをスクロールすると CPU 使用率が上がる

皆様、こんにちは。Windows プラットフォーム サポートの山崎です。

今回は、DWM が有効である環境において、多数の子ウィンドウを抱えるウィンドウをスクロールすると CPU 使用率が上がる点についてお伝えいたします。
まずは DWM についてですが、DWM(Desktop Window Manager)は Windows Vista 以降のオペレーション システムで用いられる最新のデスクトップ エクスペリエンスを有効化するための描画システムです。

この DWM が有効である環境において、多数の子ウィンドウを抱えるウィンドウをスクロールする作りのアプリケーションは、アプリケーションを実行し画面スクロールを行いますと、アプリケーションと DWM の間に子ウィンドウの数に応じたメッセージの送信が発生するため、dwm.exe が高負荷になり CPU 使用率が上がります。
その結果、画面上ではスクロールの途中で動きが止まり、アプリケーションがフリーズしたようにみえる事象が発生します。

スクロールすると CPU  使用率が上がるのは製品の制限事項となり、DWM の無効化ができない Windows 8 以降のオペレーション システムでは回避策がございませんため、本事象を回避いただく場合には、アプリケーションの中の子ウィンドウを減らす必要がございます。

Windows Vista および Windows 7 では、レガシーなデスクトップ表示と最新のデスクトップ表示(Windows Aero テーマ使用)が共存しており、DWM の有効 / 無効の設定変更が可能でした。
しかしながら、Windows 8 以降はクラシックテーマが廃止され、最新のデスクトップ表示のみになったので、DWM を無効化できなくなっています。

以上のことから、DWM が有効である環境におきましては、多数の子ウィンドウを抱えるウィンドウをスクロールする作りのアプリケーションを推奨しておりません。
アプリケーション開発の際には、十分ご注意いただきますようお願い申し上げます。

本 Blog が少しでも皆様のお役に立てれば幸いです。