У меня есть CreateProjectView
, который будет содержать браузер Gecko в одной из своих сеток. Затем я создаю окно с содержимым, равным CreateProjectView
и использующим .ShowDialog()
. В результате появляется новое диалоговое окно, содержащее CreateProjectView
. Но вот проблема, если я выйду из диалога, память все еще остается очень высокой. Я попытался воспроизвести видео на YouTube и закрыл диалоговое окно, но все еще слышал воспроизведение видео.
Я создаю диалог с помощью:
new Window() { Content = new CreateProjectView() { Margin = new Thickness(20,0,20,20) } }.ShowDialog();
Я добавляю браузер Gecko через:
WindowsFormsHost host = new WindowsFormsHost();
host.Child = CreateProjectViewModel.YouTubeBrowser;
YouTubeVideoSelectionGrid.Children.Add(host);
CreateProjectViewModel.YouTubeBrowser.Navigate(CreateProjectViewModel.DefaultYouTubeSite);
Вещи, которые я пробовал:
Я попытался добавить событие закрытия в окно и заставить его рыться в содержимом, являющемся представлением, и получать доступ к модели представления. текущий экземпляр браузера Gecko и установка его в null безрезультатно.
Я также попытался удалить браузер, и он работает впервые, но если я пытаюсь создать другой диалог, приложение просто закрывается.
Я попытался удалить Xpcom.Shutdown();
, и это решило проблему закрытия приложения из no. 2 и утилизация браузера удалила YouTube видео, которое я слышал. Но что-то не так с памятью процесса из инструментов диагностики. Каждый раз, когда я создаю диалоговое окно, оно добавляет 20-30 МБ и не исчезает, даже если я закрываю диалоговое окно. Если я открою диалоговое окно 10 раз, которое добавляет около 200 МБ +, которое говорит, что не все утилизируется, и мне интересно, что осталось, я даже позвонил System.GC.Collect
, но оно все равно не освобождает память.
Где я сейчас нахожусь:
Я пытался лично разместить WindowsFormsHost
и GeckoWebBrowser
в событии закрытия родительского окна, и пока что происходит:
- Видео YouTube, которое я слышал из закрытого диалогового окна, остановилось, поэтому, по крайней мере, я думаю, что браузер отключен.
- Также больше не увеличивается использование памяти при открытии следующих диалоговых окон, таких как одно. Из № 3 я испытал то, что попробовал.
Единственное, что не так с этим, это то, что я начал использовать 75 МБ памяти, и после того, как я открыл свой первый диалог, он превращается в 350 Мб, что понятно, так как я встроил браузер НО даже после удаления браузера и winformshost после закрытия окна, использование по-прежнему rem Айнс в 350mb. Если я попытался создать диалоговое окно, содержащее браузер, и использовать его, память все равно останется примерно такой же.
Это все еще далеко от окончательного решения, но, к сожалению, я должен двигаться дальше. Вопрос, однако, все еще очень открыт, и я все же предпочел бы вернуться к 75–100 МБ использования памяти или go к использованию памяти до того, как отобразился первый диалог.