Ответ 1
Я думаю, вы можете сделать объект singleton, и вы можете вручную очистить значения объектов вручную. Пожалуйста, перейдите по ссылке ниже https://msdn.microsoft.com/en-us/library/ff650316.aspx
Я сделал приложение для Windows-телефона, у которого, к сожалению, есть утечка памяти, потому что страницы не удалены правильно. Это было решено с помощью ответа:
Удалить страницы Windows-телефона Заявив:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
while (App.RootFrame.RemoveBackEntry() != null) ; //line if you navigate without backkey
base.OnNavigatedTo(e);
this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();
this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();
this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();
});
});
}
Это удалило ссылки на страницы из профилировщика. Но память по-прежнему увеличивалась при навигации. И не было очевидным, откуда появилась увеличенная память. Поэтому я попытался ввести пустой проект и перешел к нему в качестве звездной навигации, Иллюстрированный как:
Это уменьшилось до 20 мб, визуальных эффектов и других элементов. Так что это был важный шаг. Поэтому я хотел разделить функциональность на разные проекты, чтобы удалить любые связи между различными функциями и сохранить низкое использование памяти. Это привело к следующей структуре:
Я разделяю модели между всеми проектами, используя портативную библиотеку. Это повлияло на то, что при каждой навигации к новому проекту все очищается в старом проекте, т.е. Существует только один элемент каждого элемента, значительное улучшение памяти. Но все же какая-то утечка памяти, хотя и ограниченная, что означает лишь некоторое увеличение памяти. Но откуда приходит память? Возвращаясь к профилировщику:
Это показывает, что страницы не удаляются конкретно, все элементы .view. был бы удален кодом в конфигурации всех страниц, находящихся в одном проекте. Однако утечка памяти аналогична.
Вопрос
Не существует информации, разделяемой между двумя проектами, за исключением того, что они могут создать версию LibraryOfModels
. Поэтому никакие события, переменные или ссылки не распределяются между границами проекта.
Но для жизни меня я не могу удалить его из памяти. Я хочу удалить их из памяти, так как мой фрагмент кода в верхней части делает, если навигация была только внутри одного проекта. Проблема существует из-за того, что навигация распространяется по двум проектам. Но он имеет некоторые преимущества памяти в других областях, поэтому я хочу эту структуру.
Надеюсь, кто-то может помочь. спасибо!
Дополнительные тесты
Я пробовал делать все пользовательские настройки страниц, чтобы избежать навигации. Но воссоздавая их пару раз, была устойчивая утечка 1-2 Мб. Идея проекта, следовательно, по-прежнему лучше, так как существует привязка. Но до сих пор нет решения по его устранению.
Все еще надеется на рыцаря с сияющей клавиатурой;)
Я думаю, вы можете сделать объект singleton, и вы можете вручную очистить значения объектов вручную. Пожалуйста, перейдите по ссылке ниже https://msdn.microsoft.com/en-us/library/ff650316.aspx
Найдите все одноразовые графики/ввода-вывода, убедитесь, что их разместили (после того, как вы закончили их использовать).
Все такие объекты наследуются от интерфейса IDispose.
Остерегайтесь сторонних элементов управления/библиотек, Image, LongListSelector, FlipView или WebView, потому что у них есть некоторые проблемы с управлением памятью.
Вы должны убедиться, что нити/задачи/таймеры не ссылаются на ваши представления /ViewModels.
Есть две интересные статьи об утечках памяти:
Я думаю, будет сложно найти основную причину без какого-либо образца проекта. Если это не происходит в пустом проекте с той же архитектурой, то в вашем коде есть некоторые проблемы.