C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.80461 の関連記事表示

<< 0 >>
■80461  Re[2]: DbGrid のすばらしさをご存知の方に
□投稿者/ 魔界の仮面弁士 -(2016/07/19(Tue) 14:28:57)
    2016/07/19(Tue) 14:32:25 編集(投稿者)

    No80458 (魔界の仮面弁士) に追記
    > ■No80444 (ym さん) に返信
    >> 列が10であろうと20であろうと1千万のデータを時の間に表示してくれます。

    大変失礼しました。
    列数・行数の情報を完全に読み落としていたようで。m(_ _)m


    DataTable に溜め込む方法は、ADODB.Recordset でいうところの
    「adUseClient & adOpenStatic」相当なので
    流石にメモリ消費量がきつくなりました。

    一千万×20列だと、各列 32bit 消費で、最低でも 763MB 相当。
    数値ではなく文字列型だと数倍に増えますからね…。

    手元の環境で再検証したところ、20列×1000万行をバインドさせると、
    1分程度(およそ56〜58秒)といったところでした。


    メモリ消費を抑えるためには、adUseServer & adOpenKeyset などのように、
    全行をロードするのではなく、必要な行のみをロードする必要があるでしょう。

    この場合、VirtualMode を使うことで、1分→10秒程度まで改善されます。

    https://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.virtualmode%28vs.110%29.aspx

    それでも 10 秒というのは長い気もしますが、これは一度に
    1000万件を扱った場合です。いきなり 1000万件を用意しようとすると、
    AddCopies (あるいは RowCount)の段階で時間がかかってしまい、
    その部分だけで 9.2〜9.9 秒程度を要してしまうことになります。


    ですから実際に使う場合は、初期ロード数は数万件程度のオーダーに抑えておき、
    必要に応じて、残りの部分を読み出すといった方法をとるようにするのが
    良いと思います。それなら、現実的なパフォーマンスを得られそうです。
記事No.80444 のレス /過去ログ137より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -