To reproduce: - Add 20 document windows that contain property grid to a dock (use RadTextBox for he grid's selected object). - Close and dispose the windows. - The memory is not properly released.
I found a work around to this issue. Setting the SelectedObject to null did not free the memory. I had to walk through PropertyGrid items, and setting the DataBoundItem to null. Sharing the code just incase someone need it. if (radPropertyGrid1 != null) { this.comboBox1.SelectedIndexChanged -= new System.EventHandler(this.comboBox1_SelectedIndexChanged); //loopthroug all the grid item and dispose them foreach (var item in radPropertyGrid1.Items) { item.DataBoundItem = null; IDisposable original = ((Telerik.WinControls.UI.PropertyGridItem)(item)).OriginalValue as IDisposable; if (original != null) original.Dispose(); IDisposable instance = ((Telerik.WinControls.UI.PropertyGridItem)(item)).Instance as IDisposable; if (instance != null) instance.Dispose(); IDisposable value = ((Telerik.WinControls.UI.PropertyGridItem)(item)).Value as IDisposable; if (value != null) value.Dispose(); } if (radPropertyGrid1.SelectedObject != null) { ((IDisposable)radPropertyGrid1.SelectedObject).Dispose(); radPropertyGrid1.SelectedObject = null; } this.radPropertyGrid1.EditorInitialized -= new PropertyGridItemEditorInitializedEventHandler(radPropertyGrid1_EditorInitialized); this.radPropertyGrid1.EditorRequired -= new PropertyGridEditorRequiredEventHandler(radPropertyGrid1_EditorRequired); if (this.radPropertyGrid1.RadContextMenu != null) { this.radPropertyGrid1.RadContextMenu.DropDownOpening -= RadContextMenu_DropDownOpening; this.radPropertyGrid1.RadContextMenu.DropDownClosing -= RadContextMenu_DropDownClosing; this.radPropertyGrid1.RadContextMenu.Dispose(); this.radPropertyGrid1.RadContextMenu = null; } if (this.radPropertyGrid1.PropertyGridElement != null) { this.radPropertyGrid1.PropertyGridElement.DisposeChildren(); this.radPropertyGrid1.PropertyGridElement.Dispose(); } if (this.radPropertyGrid1.PropertyGridElement.PropertyTableElement != null) { this.radPropertyGrid1.PropertyGridElement.PropertyTableElement.DisposeChildren(); this.radPropertyGrid1.PropertyGridElement.PropertyTableElement.Dispose(); } radPropertyGrid1.Dispose(); this.radPropertyGrid1 = null; }