メンバーシップには 30,000 人を超えるユーザーが含まれています。ユーザーがプロファイルを持つすべてのメンバーシップ ユーザーを検索または検索できるようにしようとしています。必要なプロファイル データを持つすべてのユーザーを DataTable にインポートし、そこから選択を開始することでこれを実現します。 30,000 人以上のユーザーをロードし、そのプロファイル データを DataTable に取得するには時間がかかります。ユーザーが検索しようとしているときにメンバーシップ ユーザーをロードするのではなく、内部にメンバーシップ ユーザーを事前にロードできるストレージはありますか。
1 に答える
0
30.000をすべてメモリにロードする代わりに、データベースに対して検索クエリを実行するだけで済みます。これにより、返される行が少なくなり、パフォーマンスが向上します。Membershipクラスには、ページングされたデータを返すことができるFindUsersByNameメソッドがあります。
本当にすべてのユーザーをメモリに保存したい場合は、HttpRuntime.Cacheを参照してください。すべてのユーザーをキャッシュにロードすると、Linq To Objectsを使用してユーザーにクエリを実行し、優れたパフォーマンスを得ることができます。
アプリケーションの自動開始イベントでキャッシュを埋めることができます。キャッシュデータは、アプリケーションの実行時に常にロードされます。SqlCacheDependencyを使用して、キャッシュが常に正しいことを確認できます。
于 2012-12-01T18:23:55.723 に答える