1

次は、大量のメモリを必要とする巨大なページモデルオブジェクトの弱い参照を保持しようとしているアプリケーションのサンプルコードです。Weakreferenceから強参照を作成する

Dictionary<int,WeakReference> modelCache; 

IPageModel ReadPageModel() 
{ 
    IPageModel page; 
    if (!modelCache.ContainsKey(cacheKey) || !modelCache[cacheKey].IsAlive) 
    { 
     model = new PageModel(); 
     modelCache[cacheKey] = new WeakReference(Model);     
    } 
    else 
    { 
     model = modelCache[cacheKey].Target as IPageModel; 
    } 
    return model; 
} 

私たちが返すモデル(それ以外の部分)は、弱いオブジェクトへの参照なので、後ではnullになる可能性があります。

このオブジェクトへの強い参照を作成できるようにする方法はありますか?そして、後でオブジェクトを処理すると弱い参照にすることができます。

私は弱い参照が強いものに変換されるが、逆もまた同様でない例をいくつか見てきました。

答えて

0

Javaの弱参照オブジェクトは、弱参照のみです。したがって、オブジェクトへの通常の参照を保持する限り、javaはそれを認識せず、null参照を取得しません。

0

Xenoのループス、

だから参照が強い参照だったが、私は置く前に、値オブジェクトを集めてしまったおかげで.. 次のように今私は、コードを変更した、

IPageModel page; 
    if (modelCache.ContainsKey(cacheKey) && modelCache[cacheKey].IsAlive) 
    { 
     model = modelCache[cacheKey].Target as IPageModel;       
    } 
    if(model == null) 
    { 
     model = new PageModel(); 
     modelCache[cacheKey] = new WeakReference(Model); 
    } 
    return model; 
関連する問題