2011-09-22 61 views
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 gc只有在弱引用時纔會引用弱引用對象。因此,只要你持有對象的正常引用,java將不會gc它,並且你將不會得到空引用。

0

由於異種狼瘡,

於是提到了有力的參考,但在此之前我把值對象得到收集.. 我現在已經修改了代碼如下,

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;