2013-10-29 123 views
9

目前與Primefaces 3.4.2一起工作,我們注意到如果您使用ajax瀏覽我們的應用程序,而不重新加載頁面,那麼我們會開始使用大量內存。目前使用一個名爲CCDump的程序來分析firefox中的內存,並注意到我們抓住了很多殭屍dom對象。縮小到重點由以下primefaces創建一個對象上selectBooleanCheckboxPrimefaces性能問題

<p:selectBooleanCheckbox id="compareChkbx" 
    value="#{cc.attrs.xProd.selected}" styleClass="selectBooleanCheckbox" 
    rendered="#{dto.size > 1}" > 
    <p:ajax event="change" oncomplete="radioButtonSelected()" 
     listener="#{compareBean.onClickCompare(cc.attrs.xProd, cc.attrs.dto.partTerminology.partTerminologyId)}" update=":hform:lookupResults:pageInfo :hform:compareProducts:compareGroup @this" process="@this" /> 
</p:selectBooleanCheckbox> 

而且我看到數百本實例的元素,當我運行CC分析。如果我「顯示圖表」上的元素之一,我得到如下:

FragmentOrElement (xhtml) input id='lookupResults:CatResultList:0:aapPartType:list-by-cat:22:aapProd:aapProd:compareChkbx_input' http://localhost:8080/epcfe-web/main.xhtml 
JS Object (HTMLInputElement) 
FragmentOrElement (xhtml) div class='ui-helper-hidden-accessible' http://localhost:8080/epcfe-web/main.xhtml 
FragmentOrElement (xhtml) div id='lookupResults:CatResultList:0:aapPartType:list-by-cat:22:aapProd:aapProd:compareChkbx' class='ui-chkbox ui-widget selectBooleanCheckbox' http://localhost:8080/epcfe-web/main.xhtml 
nsChildContentList 
nsEventListenerManager 

我注意到的是,導航的同時申請後,我結束了在螢火蟲腳本標籤hundereds javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces/eval/seq/xx另一件事

我認爲有一個監聽器沒有被取消分配,連接到由p:selectBooleanCheckbox創建的div,我只是想知道如何在用ajax重新加載頁面的那一部分後釋放該對象。

回答

8

在使用PrimeFaces時,對於內存泄漏進行了一些討論。 「拜耳DBA」關於PrimeFaces社區論壇張貼了這個問題:

http://forum.primefaces.org/viewtopic.php?f=3&t=25942&sid=caab96cad56a307f298b6267bf1936ef

其中將近一年前導致了這個bug報告和補丁提交:

http://code.google.com/p/primefaces/issues/detail?id=4848

我不認爲這個補丁已經成爲了主幹,但是如果你看看代碼,你可以看到它爲每個小部件添加了dispose()方法,以便在刪除時清除小部件資源。

您可能會發現應用此修補程序可以改善殭屍DOM元素的狀況。 另外,我注意到補丁提及「PrimeFaces.widgetCache」時,其清理出資源,所以你可以嘗試在你的腳本類似:

delete PrimeFaces.widgetCache[id];

_Pez

+0

第一個環節提供節目令人難以置信的自我研究和調試能力。 +1給你的答案,並希望我可以把它給任何bayer-dba在PF論壇。 –