[.NET][WPF]VS2010やEvernoteの描画が更新されない不具合と回避法
こんにちは、Mozamimyです。
今日は.NETとWPFの画面描画関連の不具合(?)とその回避法について少し書きたいと思います。
先日Visual Studio 2010 ProfessionalとEvernoteを入れて使っていたのですが、どうも画面の描画がおかしい。ふたつのソフトの共通点はWPFを用いているということ。普通に操作していると画面の更新が起こらずに、ウィンドウの大きさを変えたりしないと画面が更新されません。
この問題は割とクリティカルで、ソフト自体が操作不能になります。
WPFは描画処理をDirectXに投げているためGPUを使って描画しています。そのため、GPUとの相性が悪いと画面の更新が行われたりしないことがあるようです(憶測ですが)
とりあえずVisual Studio 2010に限っては、メニューのオプションを開き、以下のようにチェックを外してあげればハードウェアを使わない設定にできます。
視覚効果が無効になるのはちょっと残念ですが、ソフトウェアレンダリングで視覚効果をオンにするとレスポンスが悪くなるので我慢です。
ただ、Evernoteにはこのようなオプションがないので、WPF自体の設定をいじることによって描画にハードウェア(GPU)を用いないように設定する必要があります。
いろいろ調べていると、以下のサイトにあたりました。
このサイトによると、WPFのハードウェアアクセラレータをオフにする方法として、レジストリに値を書き込むという方法が紹介されています。
レジストリにHKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphicsというキーを作成し、その中にDisableHWAccelerationというDWORD値を作り、値を1とします。
デフォルトでこのキーは作られていないようなので、無ければ作ってください。わたしは作りました。
この設定を行うとWPFのハードウェアアクセラレータを無効にすることができます。ただしGPUを使わずにレンダリングするので、せっかくのGPUがもったいないしパフォーマンスも悪くなりますが.. 使えないよりはマシです。
#WPFが使われていると思われるExpression BlendやExpression Webがちゃんと動くのが謎ですが.. Visual Studio 2010とEvernoteの実装に問題があるのかな?