Hi
Users of my app some time ago reported issue with memory leak, so I started investigation and it looks that there is problem with RadGridView.
This is my sample code:
public partial class Form1 : Form { BindingList<Package> _packages = new BindingList<Package>(); BindingList<PackageItem> _items = new BindingList<PackageItem>(); public Form1() { InitializeComponent(); radGridView1.DataSource = _packages; radGridView1.ReadOnly = true;
GridViewTemplate viewItemsTemplate = new GridViewTemplate(); viewItemsTemplate.DataSource = _items; this.radGridView1.MasterTemplate.Templates.Add(viewItemsTemplate);
GridViewRelation relation = new GridViewRelation(radGridView1.MasterTemplate); relation.RelationName = "myRelation"; relation.ChildTemplate = viewItemsTemplate;
relation.ParentColumnNames.Add("Id"); relation.ChildColumnNames.Add("PackageId");
this.radGridView1.Relations.Add(relation); _packages.Add(new Package() { Id = "1", Name = "Package1" }); _items.Add(new PackageItem() { Id = "1", PackageId = "1", Name = "Item1 in package1" }); _items.Add(new PackageItem() { Id = "2", PackageId = "1", Name = "Item2 in package1" }); _packages.Add(new Package() { Id = "2", Name = "Package2" }); _items.Add(new PackageItem() { Id = "3", PackageId = "2", Name = "Item1 in package2" }); _items.Add(new PackageItem() { Id = "4", PackageId = "2", Name = "Item2 in package2" }); radGridView1.BestFitColumns(); } private void btnDelete_Click(object sender, EventArgs e) { radGridView1.BeginUpdate(); PackageItem pi = _items[0]; _items.Remove(pi); radGridView1.EndUpdate(); } }
When I delete row I call BeingUpdate() and EndUpdate(), this is needed – without these calls row is not deleted and after click on row exception is thrown.
TO SEE this problem before deleting row YOU HAVE TO expand child rows!
I used profiler and I have seen that there are types that hook this event and do not unhook after disposing! These types are: GridDetailViewCellElement, GridDetailViewRowElement, GridTableElement. You can check details in screen shots.
How can I solve this problem? This is really urgent issue for me – I have a lot of updates in my grid and after couple hours there is always out of memory exception caused by my app.
Regards