用戶在使用GIX4某模塊的過程中,內存只見加不見減。我們懷疑出現了內存洩漏,所以我花了相當一 段時間來進行此問題的排查。
我使用Red Gate公司的產品ANTS Memory Profiler 5進行應用程序的內存進行監視。並在過程中修改 程序中出現的一些問題。但是最後留下一個不知道原因的引用,如圖1:
圖1 洩漏對象引用圖
由圖中可以看出,Application.Resources永久地引用了臨時控件SelectionDataGrid。原因出在 DeferredAppResourceReference類的Inflated事件被ResourceReferenceExpression對象引用。經查找相 關資料,確定為WPF框架的BUG。該BUG會使內存不斷地洩漏。
官方原文:
When a DeferredResourceReference reference is used by a ResourceReferenceExpression class, the internal Inflated event causes a strong reference to be held to the expression. This keeps the whole visual tree from being collected by the Garbage Collector after the references are removed from the tree if the DeferredResourceReference reference is never inflated.
另外,該補丁並不提供下載……汗!