2010-11-18 4 views
2

私たちは、ここで説明するように、シルバーのビットマップキャッシュを利用することにより、高いCPU使用率の問題を解決することができました:Silverlight 4のビットマップキャッシュの欠点は何ですか?

我々は<オブジェクトにEnableGPUAccelerationパラメータを追加しました>タグ。 CPU使用量を適切なレベルに下げるために、アプリケーション全体のルートビジュアルグリッドにCacheMode = "BitmapCache"を追加する必要がありました。だから私は、ビットマップキャッシュにあまり依存していないという欠点があるのだろうかと思っています。それが常に有益だったなら、私はそれがデフォルトで有効になると思います。

私はAnthonyWJonesによって良い答えでこれと同様の問題が見つかりました:

だから、1の欠点は、それがより多くのビデオRAMを使用することです。私はこれが、他のグラフィックスを集中的に使っているアプリケーションが同時に動作することを悪化させる可能性があると思う。他にも欠点はありますか?

ビデオカードにすべてのものをキャッシュするのに十分なビデオRAMがない場合は、Silverlightが正常に機能しなくなり、UIを再レンダリングするためにCPUサイクルが増えると想定します。あなたの助けのための


おかげで、
リチャード

答えて

5

ビットマップキャッシュを多用して実験したところ、アプリケーションではこれをオフにしました。アニメーション、スキッシュ、回転などのような画像がある場合など、GPUを使用して変更されていないUIの変形を実行したいときにうまくいきます。しかし、ビットマップキャッシング/ GPUアクセラレーション(現在の実装では)は、UIの内部でキャッシュ/操作したいビジュアルツリーを更新し続けている場合、かなり劇的に遅くなります。静的なビットマップを移動するだけの場合は、キャッシュしてGPUを使用して高速化してください。しかし、キャッシュにフラグを立てたUIの部分から、ビジュアルツリーのどこかで作品を調整していることがあります。そのような場合は、GPUのキャッシュを各フレームごとに更新する必要があります。

つまり、オンにするかどうかは、になります。ここでは、をオンにして、アプリケーションが何をしているかによって決まります。このため、ビットマップキャッシュを使用している場合やSilverlight UIのパフォーマンスに問題がある場合は、(一時的に)cache visualizationredraw regionsを有効にすることを強くお勧めします。あなたのアプリは、あなたのアプリが気に入っているように見えるようにしますが、あなたのUIが何をしているかを見れば、すべてのCPUを噛んでいます。

+0

ありがとう!意味あり。したがって、キャッシュが常に無効化され、再キャッシュされる必要があるため、キャッシュされる領域が頻繁に変更される場合、キャッシュによって処理が遅くなる可能性があります。残念ながら、なぜそれが再描画されているのかわかりません。私は再描画領域を有効にして、キャッシングをオンにした後に再描画を表示しませんでした...うまくいけばそれは問題ありません。再度、感謝します! –

1

私はあなたが説明したものに懸念を見ませんが、私はあなたがオーバービットマップキャッシュを使用することができると信じています。

たとえば、500x500の「トップ」キャンバスがあり、それに100x100の25個の「サブ」キャンバスが含まれているとします。サブカンバスごとにコンテンツや色などを更新しています。トップキャンバスを画面上に移動させるイベントがあったとします。すべてのサブキャンバスが同じ間隔で変更された場合は、トップキャンバスのみをビットマップキャッシュすることが理にかなっています。ただし、サブキャンバスがすべて同じ間隔で変更されない場合や、まったく変更されない場合は、代わりに各サブキャンバスでビットマップキャッシングを設定する方が効果的です。この一歩をさらに進めてくださいトップと各サブキャンバスの両方をビットマップキャッシュすると、無益なキャッシュで無駄なサイクルが発生する可能性があります。

または、私はあなたが求めているものとは全く別の道を歩いていますか?

+0

これは意味があります - ありがとう。私たちは私たち自身のアニメーションを何もしていないので、Telerikグリッドを表示しています。彼らが何をしているのか分かりません。データは変更されませんが、再描画領域を有効にすると、画面全体が再描画されるのがわかります。とにかく、ルート要素でのみビットマップキャッシュを行うことでCPU使用率の問題を解決しました。 –

+0

Silverlight Firestarterのこのビデオには、ビットマップのキャッシュとレンダリングのパフォーマンスに関する良い情報もあります。http://channel9.msdn.com/Series/Silverlight-Firestarter/Silverlight-Firestarter-2010-Session-6-Tune-Your-Application -Profiling-and-Performance-Tips –

関連する問題