4

現在、約 100 万行を DataTable に格納しています。これには約 600 Mb の RAM が必要です。

したがって、アプリケーションを実行すると、1 000 000 行が DataTable に格納され、それが GridView に表示されます。アプリケーションを閉じると、明らかにメモリがクリアされます。

ユーザーにこのオプションを提供したいと思います。つまり、ユーザーがフォームを閉じようとすると、メモリをクリアするかどうかを尋ねられます。

これを行う理由は、アプリケーションを実行するたびにデータが Datatable に読み込まれるのを待つ必要がないためです。

.... 私は C# にかなり慣れていないので、これが適切な質問である場合は申し訳ありません。

4

3 に答える 3

3

メモリ内にそのデータを持つ実行中のアプリケーション/プロセスがある場合にのみ、メモリ内に何かを保持できます。アプリケーションが閉じた場合 (そして、メモリ内にそのデータを持つアプリケーションのインスタンスが 1 つしか開いていない場合)、メモリは解放されます。メモリに保持したい場合、唯一のオプションは

  • アプリケーションを閉じないでください。たとえば、代わりにウィンドウを非表示にします (一般に、ユーザーが感謝しない非常に悪い考えです)。
  • そのデータを別の別のプロセスに保持し、アプリケーションが Windows サービスではない場合でも実行し続けます (これも、実際にサービスの形式を開発しようとしている場合を除き、ユーザーが感謝するものではない可能性があります)。 Windows アプリケーションとは異なります)。

はるかに良いアイデアは、アプリケーションが大きなデータ セットを処理する方法を変更して、すべてをメモリに保持する必要がないようにすることです。たとえば、すべてのデータを大きなリスト ビューに表示してから仮想リスト ビューを使用する場合などです。現在ユーザーに表示されている行のみがメモリにロードされるようにします。その後、データを外部データベースまたは半永久的なファイル (SQLite データベースなど) に保存できます。

または、現在のように毎回データセットをロードするだけです。

于 2012-10-15T10:51:07.887 に答える
3

メモリではなく、ファイルまたはデータベースに保持することをお勧めします。実行時に使用する一部のデータをクエリできます。たとえば、一度に 20 または 50 レコード。

一度に 100 万件のレコードをデータグリッドに表示しても意味がありません。

于 2012-10-15T10:35:18.220 に答える
0

データの特定の領域 (行に対応するオブジェクトのセット) を圧縮し、必要に応じて抽出してみてください。参照、 ドットネットでオブジェクトを圧縮

于 2019-07-05T03:07:00.890 に答える