C#+WPFチューニング戦記

C#とWPFで高速なコードと最適なシステムを書くためにやってきたいろいろな事を書いてみます。.NET Frameworkのソースコードを読み解きましょう。なお、ここに書かれているのは個人の見解であって何らかの団体や企業の見解を代表するものではありません。

VirtualizingStackPanelのコード長いですね

ここのところ毎日ソースコードを読みながら実況中継という気分ですが。1日あたり1クラス程度を読むのを日課にしておりますが、本日は苦戦中です。

 

PanelがベースになっているVirtualizingPanelを基底クラスに持ちながら、VirtualizingStackPanelあの量の機能を汎用で実装するにあたり、7789行。

凄いなぁと思ったのはこのあたりでしたね。

http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/VirtualizingStackPanel.cs#1535

こんなにref・・・・。あ、いやいやこの書き方自体は速いから可ですが。

MeasureOverride周辺は、凄まじい実装の様相です。

読んでみると、標準的なスタックパネルっぽく、仮想化するために大変な苦労をしているところまでは読めます。

StackPanelに、MeasureとArrangeのヘルパーメソッドがあるのも(それがinternalで残念なことも)初めて知りましたし。

Panel系の動きを把握するには、ItemsHostに対する処理を読むのがコツです。

 

そういえば、全く関係ありませんが、ZIndex関連の実装だけはどうしても納得が行かないので、次のバージョンではなんとかしてもらえないだろうかと思います。せめてCanvasだけでも。

せめてPanelはinterface化してもらえるとありがたいと思います。あれを継承するのを拒むと激しい難産になります。WPFの上級セットみたいなものを作るのも楽しそうだと最近は思っています。