WPFのしくみを考えると設計を見直すことになった
軽いクラスをたくさん作る
基本的に、インスタンスのプロパティを減らしたほうがパフォーマンスがよくなるらしいです。問題範囲を狭くすると見通しが良くなるといいますが、パフォーマンスも上がるなら一石二鳥ですね。ひとつのプロパティを1000のテキストブロックにバインドするのはほぼ一瞬ですが、逆の場合は1秒かかるそうです。
LINQのコレクションはToListしてからかObservableCollectionに渡してから返す
とくにObservableCollectionに渡すと早くなります。これはコレクションの内容に変更があったことを通知する仕組みがあるからだそうです。また、ただ単にIEnumerableはなくてIListをバインドすると多少早くなるらしいです。
パフォーマンスの最適化 : データ バインド
IEnumerableをコレクションに渡すと、暗黙的にIListインターフェースのラッパーオブジェクトが作られるため、その分タイムロスになるとか。
パフォーマンスの最適化 : データ バインド
それで
いつの間にかビューモデルやモデルが肥え太ってきたので、ロジックやプレゼンテーションに直接関係ないプロパティやメソッドをモデルクラスやビューモデルから追だしてました。おかげさまでこの作業もあらかた終わりなんですが、結構しんどいです。