現在、開発凍結されています。ここに記載されている内容は、現在実現の目処はたっていません。
06/10/22
概要
shared_resourceの問題点を改善し、パフォーマンス向上と効率よいメモリ資源の利用、更にコーディングの手間削減を実現する。
auto_resourceには以下の長所がある。
- shared_resourceに対して管理用情報のスリム化
- 以前使ったリソースの再利用による読み込み負荷の削減
- リソース本体の型ごとにstaticメンバを持たないようにしたことによる利用時の手間の軽減
- 限界メモリ使用量を設定可能
ただし、以下の短所もある。
- 後の使いまわしのためリソースを残すのでメモリ使用量が最小ではない
- メモリ整理が不充分でメモリ使用量が限界値を超え続けることがある
- 余分なリソースを整理するときのパフォーマンスが悪い
- リソース本体を格納するクラスではLoadのほかSizeを実装する必要がある
使用方法
LoadメソッドとSizeメソッドを実装したクラスTについて、auto_resource<T>が使える。
リソースの使用の際にはOpenしたのちGetResourceとすればT*型のリソースへのポインタが得られる。
メンバ関数
void Close()
リソースの使用を中止する。
明示的に呼び出す必要は無く、呼び出して参照カウントが0になってもすぐにはメモリ解放されないが、メモリ使用量が増大した場合には考慮される。
T* GetResource()
リソースへのポインタを得る。
void Open(const string& fileName)
リソースの使用を開始する。
既に読み込み済みのリストの中に一致するものがあれば読み込みは行わず、使いまわすためパフォーマンスが向上する。
リスト中のリソースが増えて限界メモリ使用量を超えた場合は古いリソースの解放を行うが、必ずしも精度はよくない。
その他の関数
void AutoResourceManager.SetMaxSize(DWORD dwMaxSize)
限界メモリ使用量を設定する。
この結果はすぐには反映されない。
T::Load
T型は、string型のファイル名を受け取り、読み込む関数を実装しなければならない。
T::Size
T型は、そのクラスのサイズを取得するための関数を実装しなければならない。
auto_resource自体があまり厳密ではないため、こちらもあまり厳密ではなく概数値でかまわない。