How to get rid of user control with free memory when changing tabs in WPF

I am using infragistics TabGroupPane. In this case, I control user control when the ContentPane is active, and deletes the previously active contents of the tab. here is my xaml code:

<igDock:DocumentContentHost> <igDock:SplitPane> <igDock:TabGroupPane x:Name="tabMainMenu" SelectionChanged="xamMainTab_SelectionChanged" AllowDrop="False"> <igDock:ContentPane x:Name="tabItem1" Header="Item 1"></igDock:ContentPane> <igDock:ContentPane x:Name="tabItem2" Header="Item 2"></igDock:ContentPane> <igDock:ContentPane x:Name="tabItem3" Header="Item 3"></igDock:ContentPane> <igDock:ContentPane x:Name="tabItem4" Header="Item 4"></igDock:ContentPane> <igDock:ContentPane x:Name="tabItem5" Header="Item 5"></igDock:ContentPane> </igDock:TabGroupPane> </igDock:SplitPane> </igDock:DocumentContentHost> 

and side with code

 private void xamMainTab_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { if (e.RemovedItems.Count > 0 && null != e.RemovedItems[0] as ContentPane) { (e.RemovedItems[0] as ContentPane).Content = null; } GC.Collect(); ContentPane selectedTab = this.tabMainMenu.SelectedItem as ContentPane; BindContainer(selectedTab.Name); } private void BindContainer(string item) { switch (item) { case "tabItem1": this.tabItem1.Content = new UserControls.UserControl1(); this.tabMainMenu.SelectedItem = this.tabItem1; break; case "tabItem2": this.tabItem2.Content = new UserControls.UserControl2(); this.tabMainMenu.SelectedItem = this.tabItem2; break; case "tabItem3": this.tabItem3.Content = new UserControls.UserControl3(); this.tabMainMenu.SelectedItem = this.tabItem3; break; case "tabItem4": this.tabItem4.Content = new UserControls.UserControl4(); this.tabMainMenu.SelectedItem = this.tabItem4; break; case "tabItem5": this.tabItem5.Content = new UserControls.UserControl5(); this.tabMainMenu.SelectedItem = this.tabItem5; break; default: this.tabItem1.Content = new UserControls.UserControl1(); this.tabMainMenu.SelectedItem = this.tabItem1; break; } } 

here I set the contents of the last element to null. (e.RemovedItems [0] as ContentPane) .Content = null; but in this case the memory (size) is not freed. Then I use GC.Collect, this time some memory is free. Whether this is a recording method to free memory or some other way, then please provide me with any link to this. And also in this case, when my user control contains WebBrowser, then the memory is not freed, if I use GC.collect, please also advise me about this.

thanks

+4
source share

All Articles