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 が少しでも皆様のお役に立てれば幸いです。