大量のユーザーデータをメモリに保持するアプリを作成していますが、ほとんどの場合、すべてを List<T> 構造 (およびルックアップが必要な場合は一部の Dictionary<T,T>) に保持しています。
そして、私は疑問に思っています...
リストはどのくらい効率的ですか? それぞれのメモリ オーバーヘッドはどれくらいですか? (つまり、それらに含まれるオブジェクトに加えて、メモリ スペースが必要です) 新しいオブジェクトをインスタンス化するたびに、どのくらいのペナルティを支払う必要がありますか?
より効率的な方法はありますか?
辞書は単なるハッシュテーブルですよね? それとも、効率の悪いデータ構造ですか?
配列を使用したいのですが、常に配列に追加したり削除したりするという典型的な問題があるため、それらを拡大/縮小するのは面倒です。
アイデア/提案はありますか?
編集: 基本的なデータ構造 101 と、追加/削除にはリンク リストの方が優れており、ランダム アクセスには HashTable の方が優れている理由を知っています。
私は主に.Netの特異性について心配しています。たとえば、これらの構造のそれぞれがどれだけのメモリを浪費するか。そして、それらの初期化/強制終了に時間が費やされました。
たとえば、リストのインスタンス化/GC に時間がかかるが、クリアするのにそれほど時間がかからない場合は、リストの小さなプールを待機させておき、それらをクリアしてプールに送り返す必要があるかもしれません。単に逆参照するのではなく、完了したら。
または、Hashtables の方がアクセスは高速ですが、多くのメモリを浪費する場合は、Lists を使用して、項目数が少ない場合はリストをトラバースすることをお勧めします。
また、私のアプリは非常にメモリを集中的に使用するため (memcached のように考えてください)、メモリ使用量にも注目したいと思います...そのような情報をどこで見つけることができるか知っている人はいますか?