Я собираюсь использовать псевдокод в этом вопросе, поэтому, пожалуйста, обратитесь к этому в теоретическом аспекте (я имею в виду, что будут некоторые упрощения)
Предположим, что такая ситуация:
I MainWindow моего приложения, которое имеет TabControl .Чтобы удалить элемент из его коллекции, я использую static функцию MainWindow следующим образом:
public static void CloseTab(string someKindOfTabIdentity)
{
var tab = myTabControl.Items.FirstOfDefault(someScenario);
if (tab != null)
{
myTabControl.Items.Remove(tab);
tab.Content = null;
tab = null;
GC.Collect();
}
}
Теперь у меня есть Page1 , где я разрешаю пользователю закрывать вкладку с помощью некоторой функции, скажем
private void GoToPage2()
{
MainWindow.CreatePage2AddToTabControlAndNavigateToIt()
MainWindow.CloseTab(myCurrentPage1Tab);
App.Cursor = Cursors.Arrow;
}
Эта функция должна создать новую вкладку, назначить ей содержимое, а затем, используя MainWindow.CloseTab(myCurrentPage1Tab);
, закрыть текущую вкладку, котораясодержит Page1 .
Вот вопросы:
Что происходит с выделением памяти в Page1 после строки MainWindow.CloseTab(myCurrentPage1Tab);
?
Что происходит с выделением памяти Page1 , если после строки MainWindow.CloseTab(myCurrentPage1Tab);
есть код?
Когда Page1 будет полностью освобожден из памяти?
Есть ли лучший (более эффективный) способ добиться этого?
Этот упрощенный сценарий - то, что происходит с моим приложением WPF все время, и меня беспокоит, является ли это безопасным способом управления элементами вкладок и памятью моего приложения.