2016-03-31 11 views
1

メモリマップファイル(C#MemoryMappedFile)を使用して大きなファイル(8 GB)で作業しています。私はWPFグリッド(例えばデータグリッド)にコンテンツを入れることができるようにしたいと思いますが、動作するように思われるすべてのアプローチがファイルをメモリにロードしなければならないため、メモリマップされたファイルのポイント。WPFグリッドへのメモリマップファイル

私はwpfデータグリッドが必要なデータだけにアクセスできることは知っていますが、メモリマップされたファイルにどのようにリンクすればよいのですか? 。

私はdatagrid.itemsource = fileのような簡単な方法を望んでいましたが、そのようには見えません。

私の最終目標は、この大きなファイルを読み込んで、16進エディタのようにファイルのバイト数を表示することです。誰でもメモリマップファイルを使用している例がありますか、何かがユーザーが表示しているファイルのバイト形式だけを読み取っていますか?

+0

なぜDataGridを使用しますか?列に何を表示しますか? – Evk

+0

列は動的で、バイトの行を作成します。ほとんどのヘキサエディタに似ています – user6141665

答えて

0

これをどのように行うことができるかについて概要を説明します。 UI仮想化とデータ仮想化の両方が必要になります。デフォルトのDataGrid(VirtualizingStackPanel)で自由に使用できるUI仮想化、データ仮想化ではカスタムソリューション(例:https://alphachitech.wordpress.com/2015/01/31/virtualizing-observable-collection/)を使用する必要があります。各アイテムは1MBの生データを表しますので、グリッドには合計8000個のアイテムがあります。最初は、これらの項目のどれも実際にデータを含んでいません。ユーザーがファイルのその部分にスクロールダウンすると、データはメモリマップファイルからのみ読み込まれます(上記のデータ仮想化を参照)。これにより、メモリにロードされているような8GBのファイル全体をスクロールすることができます。スクロール中に実際には1MBのチャンクがロードされ、アンロードされます。

+0

これはまさに私が必要としていたものでした。私はその例を踏襲し、大きなファイルを最小のインパクトで表示することができました(10-20MB) – user6141665

+0

これはまさに私が必要としていたものでした。私はその例を踏襲し、大きなファイルを最小のインパクトで表示することができました(10-20MB) – user6141665

関連する問題