FC2ブログ

C#等と戯れる日々

C#やその他諸々と戯れる日々。

DataGridのアレはやばいメモ

VirtualizingStackPanel.VirtualizingMode="Recycling"
Ui仮想化のモードをリサイクル方式にするという設定。
何を「リサイクル」するのかと言えば、日本語で「アイテムコンテナ」、英語では「ItemContainers」。DataGridRowクラスの1階層下のオブジェクト?かなぁ。
検証してた記事を発見。
【WPF】VirtualizingStackPanel Recyclingはコンテナがリサイクルされる。
おお、なるほど。

でもねぇ。この再利用というのが、仕事ではクセモノでした。行番号の表示とかをした時、行ヘッダに表示しているんだけど、何も設定しなければ、番号の桁数によって幅が自動的に幅が変わる動作になる。どうもこれが悪さをしているようで、特に変な実装をしたわけでもないのに、レイアウトが崩れまくる。壊れたのか?と思うくらいに。そして、再検索か、ソートを実行しない限り治らない。スクロールしても一緒。どうにも上手く直らなかったので、デフォルトで"Standard"で実装するようにしている。

○ScrollViewer.CanContentScroll="True"
WPF メモ
論理的(True)と物理的(False)の違いらしい。
Trueにした時、なぜか一部の列ソートが異常に重くなるという現象があった。原因不明…。

○EnableColumnVirtualization="True"
列方向への仮想化を有効にするかどうか。
ある程度の列数以上になると重くなるという性質が見られるので、是非Trueにしたいところなんだけど、不意に落ちる。
なぜか落ちる。そして、スタックトレースを見てもわからないという詰みな状態。
CellTemplateや、ColumnHeaderTemplateにちょい複雑なテンプレートを仕掛けたりすると、より顕著になる。

○グルーピング全般
DataGridにはグルーピングという機能があり、そのグループ単位で小計を表示したりできる。当然、それ用のテンプレートを実装する必要があるけど。
ただし、グルーピングするだけで、UI仮想化全部無効という超イヤな仕様がWPF4ではあるので、大量データを検索する時には全く使えない。
自分でDataGridRowを改造したほうがマシ。
なお、WPF4.5では、幾分の改修が期待できる。期待するしかない。というか、WPF4では諦めろって事か?

○IsReadOnly="True"
すべての列に一々設定するのがめんど臭いからと、DataGridのIsReadOnlyをTrueにしてみた事がある。
たしかに、すべての列で、IsReadOnly=Trueな状態になったけど、セル(内の文字列)のコピーまで封印されるとは思わなかった。
なんにもできない。ある意味徹底したReadOnlyだった。
(追記)
なお、VirtualizingModeを「Standard」にした場合、スクロールしただけで、セル内のTextBlockと表示される文字列は使いまわされる事なく、うなぎのぼりにインスタンス数が増えていく事が確認されている。というか、確認した。
一番下までスクロール→増える。一番上までスクロール→更に増える。さらに(ry。
ええもうそれはそれはメモリをこれでもかと食べていく。そして、画面を閉じるまで離さない。
ただ、下手に小細工をすると、余計にリークすることも経験済なので、具体的な対策は保留中。
TextBlockはともかく、文字列はどうにもならんのかい!というツッコミをしてしまった。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2012/09/10(月) 23:18:01|
  2. WPF4
  3. | トラックバック:0
  4. | コメント:0
<<DataGridのパフォーマンスが気になった時は | ホーム | マスターコンテンツとViewModelクラスの連携>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://tawamuredays.blog.fc2.com/tb.php/111-a646f53d
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

チャプターマン

Author:チャプターマン
FC2ブログへようこそ!

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (4)
WPF4 (192)
C# (72)
サーバ (1)
C# 5.0 (1)
WPF4.5 (2)
WEB (6)
WCF (2)
物欲 (2)
Windows (3)
Windows.Forms (0)
仕事 (2)
.NET5 (4)
.NET MAUI (2)
Blazor (1)

カウンター

FC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンター

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR