0

データベースにレコードを照会するアプリケーションがあります。レコードは数千になる可能性があり、これによりプロセスのメモリが急増し、最終的にはクラッシュしたり、応答が遅くなったりする可能性があります。

ページ分割されたクエリはこれに対する解決策ですが、レコード内の情報は常に変化し続けます。したがって、ユニークなエクスペリエンスを提供するために、ユーザーがクエリを実行した時点で利用可能な情報を表示する必要があります。

ページングを使用すると、ページからページへの移動時にコンテンツを動的に更新できます。クライアント側のキャッシングがこの問題を解決できると信じています。

私が見つけた 1 つの方法は、結果を XML 形式でディスクに保存し、LINQ to XML を使用してクエリを実行することです。デスクトップ アプリケーション (Web ではない) で動作する、実績のあるクライアント側のキャッシュ メカニズムはありますか?

4

2 に答える 2

2

http://msdn.microsoft.com/en-us/library/ff664753のようなパターンを参照してください。 開発者がアプリケーションにローカル キャッシュを組み込むことができる Enterprise Library Caching Application Block の使用について説明しています。

http://www.codeproject.com/Articles/8977/Using-Cache-in-Your-WinForms-Applicationsもお読みください

Enterprise Library 5.0 は、http://msdn.microsoft.com/en-us/library/ff632023にあります。

于 2012-07-13T08:47:47.297 に答える
1

キャッシュを無期限に増加させない限り、メモリ使用量は実際には問題になりません。ユーザーが決して見ることのないページをプリフェッチしたり、ユーザーが長期間表示していないページを保持したりするメリットはほとんどありません。次/前のページを動的に取得すると、パフォーマンスが高く保たれますが、編集されたページや特定の期間より古いページはキャッシュからクリアする必要があります。キャッシュをクリアするには、ページへのすべての参照を破棄し (リストや辞書から削除するなど)、ガベージ コレクターがその作業を実行できるようにする必要があります。

オブジェクトにWeakReferenceを格納し、必要に応じてガベージ コレクターにオブジェクトを収集させることもできますが、これにより、キャッシュされていないものを制御することができなくなります。

あるいは、特にグリッド コントロールの場合、これには非常に優れたサード パーティのソリューションがいくつかあります。DevExpressグリッド コントロールには、優れたパフォーマンスで非常に大きなデータ セットを処理できる優れたサーバー モードがあります。

于 2012-07-13T08:49:18.513 に答える