2009-12-12 9 views
9

私はWPFを使用してアプリケーションを開発しています。アプリはフルスクリーンで動作し、モニター解像度に関係なくうまくサイズを変更する必要があります。グラフィックデザイナーは、UIボタン、背景などのための美しい画像をデザインしました。Illustratorプラグインを使用すると、すべての画像がxamlファイルに変換されました。これらの画像をすべてアプリケーションに追加しました。また、レイアウトを維持しながら画面のサイズを変更できるように、多くのGridレイアウトを使用しています。これらのすべてが必要に応じて表示され、異なる解像度で実行されても見た目は伸びません。ただし、画面遷移とUIのやりとりは遅いです。WPFは私のアプリケーションが遅い理由ですか?

これはグラフィックスが多用されているのでしょうか?あまりにも多くのGridレイアウトを使用していますか?しかし、解決の独立性を持てるように、Gridが必要です。

アプリケーションは開発マシン上で正常に動作しますが、パフォーマンスが低いマシンでは非常に遅くなります。うん、これは期待されているが、私が見ている程度ではない。私の雇用主は、アプリケーションがこれらのパフォーマンスの低いマシンでスムーズに動作すると主張しています。

私はアプリケーションのいくつかのプロファイリングを行っていますが、最も時間がかかるのはディスプレイのものです(プロファイラーの使用効率を完全に理解していません)。

減速の原因となっているWPFの場合は、これを改善するために何ができますか?

+1

本当の答えを書くのには不十分ですが、私はillsutrator-to-xamlプラグインの出力を注意深く見ていきます。少なくとも、プレースホルダのグラフィック要素(空のグリッドなど)を使用して、アプリの動作を確認します。 – Egor

答えて

10

Performance Profiling Tools for WPFを使用して、どのWPFアクティビティがアップタイムを使用しているかを調べることができます。重いグラフィックスロードが減速を引き起こしていると仮定すると、これは単純化(レイアウトなど)する必要があるかどうか(例えばビットマップ効果(これらは古典的なパーフェクトキラーですが、私は嫌いあなたのプロファイリング!))。

6

それが景気減速を引き起こしているWPFの場合

おそらくない;)

それは減速を引き起こし、あなたのコードであることをはるかに可能性があります。 WPFは強力ですが、PDCセッションではthis videoを参照してください。WPFアプリケーションの高速化方法に関する多くのアドバイスを提供します。

+0

ビデオリンクが機能しなくなりました。 –

+1

これはそのビデオの現在の場所のようです:https://channel9.msdn.com/Events/PDC/PDC09/CL10 – TripleAntigen

2

WPFパフォーマンスは、プロセッサ/メモリ以上のマシンのビデオカードの品質に大きく依存します。悪いビデオカード=悪いWPFのパフォーマンス。

1

まあ、これはロングショット:私は(と、それはWPFを使用しています)、それはもっと上で非常にに高速十分なCPU /メモリを搭載したWindows 2008のサーバー上で非常に遅く、VSTS 2010をインストールしたとき控えめなノート。ハードウェアアクセラレーションを無効にすることができました。

、それは非常に単純であると多分あなたは、この設定を試してみたいん:Visual Studio 2010 Beta 2 editor performance fix running on a virtual machine

+0

興味深いことに、以前はWPFをスピードアップするためにDisableHWAccelerationを見たことがありませんでした! – itowlson

+0

それは私も考えました..しかし、VS2010で働いた、私は誓う=) http://stackoverflow.com/questions/1743525/can-i-and-how-do-i-target-net-4-with- vs-2008/1743556#1743556 –

4
  1. ボタンのあなたのXAMLベクター画像は、透明なPNG画像に変換します。パスとシェイプは、レンダリング、計算、サイズ変更に非常に重いものです。展開後のほとんどは、形状、サイズ、または他の属性の変化を滑らかにアニメーション化しない限り、イメージはラスターでベクトルになるように変更することはありません。

  2. グリッドは、Canvas、DockPanelに比べて非常に高価なレイアウトマネージャです。 DockPanelで特定のグリッドを置き換えることは間違いありませんが、それは簡単な修正ではなく、多くのブレーンストーミングが必要です。

  3. シングルチャイルドパネルを避けてください。ビジュアル階層を縮小してみてください。

  4. 固定サイズのボタンやそのような小さな要素を使用すると、固定サイズの子供を指定すると、パネルがレイアウト処理を行うのが容易になります。

+3

PNG画像のサイズがうまく調整されないため、ベクターがなくなりました。 –

+2

さらに、グリッドに依存しない限り、画面解像度に合わせてレイアウトを調整するアプリケーションを開発するにはどうすればよいですか? –

+0

すべての画像がPNGでなければならないわけではありません。たとえば、アイコンのすべてのアイコン、IEの前/後ボタンのように、サイズ変更しても常に同じままです。そのようなボタンはPNGに変換できます。グリッドの代わりにDockPanelを使用するか、[自動]の代わりに相対的な列/行サイズを使用できます。あなたのアプリケーションの画面を少し表示することができれば、私はいくつかのより良いステップを提案することができます。 –

0

一般的に、WPFはWindowsフォームやネイティブGDIやDirectXよりも描画パフォーマンスが非常に悪いです。

はい、WPFは、GDIでサポートされていないいくつかの素敵なものを作っているかもしれないという意味で強力ですが、それはもっと鈍いです。

多くの描画を行う必要があり、それを低速ハードウェアでサポートしたい場合は、WPFは適していません。

関連する問題