WPF の多くの型は から派生していますFreezable
。これにより、可変 POCO オブジェクトに不変性が提供され、特定の状況でパフォーマンスが向上するようです。
WPF アプリケーション内でオブジェクトをフリーズするとパフォーマンスが大幅に向上したという経験のある方はいらっしゃいますか? もしそうなら、フリーズしたときにパフォーマンスに最も大きな違いが出た項目はどれですか?
(私は似ているが異なる質問あまりにも)
ベストアンサー1
Freezable に関する私の体験談に興味があるかもしれません:
私はかつて、WPF でレンダリングするビットマップをレンダリングする muPdf を使用して PDF ビューアを作成しました。パフォーマンスが大幅に向上したのは、ページのビットマップをバックグラウンド スレッドでレンダリングし、それをフリーズしてから UI スレッドに渡すことができることです。WPF がイメージをコピーしてフリーズしないのは良いことですが、バックグラウンド スレッドでこのすべての準備を実行できることが私にとって重要な利点でした。
私の理解では、すべてのビジュアルは、WPF レンダリング スレッドによって安全にレンダリングできるように凍結される必要があります。凍結されていない大きなビジュアルをレンダリングすると、WPF がレンダリングするときに凍結されたビジュアルに複製されます。静的ビットマップを事前に凍結すると、WPF は複製せずにレンダリング スレッドとポインターを共有できます。WPF がオブジェクトが最後にレンダリングされたときから変更されたかどうかを認識していない場合、凍結されていないオブジェクトは繰り返しコピーされることもあります。凍結されたオブジェクトを使用すると、このようなコピーの必要がなくなります。