DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
No35453 の記事
■35453
/ )
Re[1]: DataGridViewのVirtualModeを有効した場合の実装方法
□投稿者/ 魔界の仮面弁士
大御所(1553回)-(2023/06/12(Mon) 16:00:50)
■
No35451
に返信(炎の妖精さんさんの記事)
> DataGridViewに約50〜1000万件のデータを表示させたいと考えており、
仮に 1 レコード当たり 32 バイト程度のデータであったとしても、
1000万レコードあったら、300MB 級のデータサイズになりますね。
これらが Web Service として通信される場合、JSON や XML 化のために
さらに数倍のデータ量が要求されることになるかもしれません。
> ネットで調べると仮想モード(VirtualMode)を有効にするとメモリ使用量を抑えることが出来るとの記載があった為、試しに実装しました。
どのように実装しましたか。
実際に試せるような実験コードが提示されていないので、
以下、概要のみの回答となりますが:
> DataTableに膨大なデータを挿入して、DataGridViewのDataSourceを設定すると"system.outofmemoryexception"のエラーが発生します。
DataGridView の仮想モードであれ、ListView の仮想モードであれ、
そもそも 1000万件のデータを画面に表示して、そのすべてをスクロールして
その 1件 1件をすべて閲覧するという事は非常に稀であり、
実際に必要なデータはごく一部だけであろうかと思います。
なので仮想モードにおいては、「現在見えているページ」、「スクロールで要求されたページ」のための
必要最小限の小さなデータを、必要に応じてサーバーから動的に読み込むという実装をとります。
Google Map で地図をスクロールするたびに Web 通信が行われる状況に似ていますね。
一度読み込んだデータでも、別の領域をロードしたらまた忘れられてしまうので、
以前の情報をとっておきたい場合は、独自のキャッシュ処理を追加します。
(いずれにしても、大量データを保持し過ぎることが無いような設計が求められます)
https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/virtual-mode-with-just-in-time-data-loading-in-the-datagrid?view=netframeworkdesktop-4.8
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
返信
削除キー/
編集
削除
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-