.NET 4.5 を使用して C# でアプリケーションを作成しています。私のアプリケーションは、ハードウェア デバイスによって消費されるバイナリ ファイルを読み書きします。ファイルは正確に 5,000,000 バイトで、100,000 個の 50 バイトの「ブロック」で構成されています。各 50 バイト ブロックには、ASCII エンコードされた文字列が含まれます (空の文字列の可能性もあります)。オフセット (インデックス * 50 バイト、および次の 50 バイトの読み取り/書き込み) を決定するだけで任意の文字列にアクセスできるように、ファイル レイアウトはデバイスによって必要とされます。
私の WinForms アプリケーションは、次のことができる必要があります。
- ファイルから 100,000 個の文字列をすべて読み込み、UI (リストボックス) に表示します。
- 文字列の追加、編集、または削除
- バイナリファイルを適切な形式で書き直します
警告:
- バイナリ ファイル内のかなりの量のデータは、最初はユーザーに表示したくない空の文字列ですが、ファイルを適切に書き直すことができるようにデータ構造に含める必要があります。
- 新しい文字列を追加する前に、それを許可する空き領域 (つまり、空の 50 バイト ブロックが少なくとも 1 つ) があることを確認する必要があります。そうでない場合、ユーザーは既存の文字列を「削除」して、新しい文字列を追加するためのスペースを作る必要があります。
- 文字列の追加、変更、および削除は、舞台裏では同じ操作です。追加は 50 バイトの null データを 50 バイトの文字列データに変更するだけで、削除はその逆を表します。
- 空の文字列を除いて、重複する文字列は保存されるべきではないため、データ構造を繰り返し処理して、文字列を追加する前、または文字列を編集して既存の文字列と一致させないようにする必要があります。
したがって、ファイルのすべてのデータを保持するデータ構造が必要になり、辞書、リスト、または配列のいずれかを決定するのに苦労しています。上記の注意事項を考えると、データ構造を UI に直接バインドすることは実行可能な解決策ではないと思います。したがって、ある種の疑似バインディングを実装するには、そのデータ構造とリストボックスの間に多くのコードが必要になると思います。その場合、どのデータ構造 (辞書、リスト、配列、その他) が機能的な観点から最も有用であり、最高の妥協案を提供します: このサイズのデータセット (最大 50 ASCII 文字の 100,000 文字列) の速度各)?