[英]Problem with page navigation C# WPF with obfuscation (Memory)
由于要解析大量信息和 UI,我正在制作一个应用程序,其中包含每个页面大小约为 200 mb 的页面。
我正在尝试重用创建的页面以不使用大量 memory。
由于某种原因,垃圾收集器未释放 memory。
如果不创建新的页面实例,我找不到导航到新页面的方法。
我有一个 singleton NavigationManager。
internal class NavigationManager
{
private static NavigationManager _instance;
public static NavigationManager Instance
{
get
{
if (_instance == null)
{
_instance = new NavigationManager();
}
return _instance;
}
}
private NavigationManager()
{
}
private List<Page> pages = new();
private Page temporaryPage;
public void NavigateTo(string pageName, MainWindow mainWindow)
{
if (pages.Any(p => p.Name == pageName))
{
mainWindow.MainFrame.NavigationService.Navigate(pages.First(p => p.Name == pageName));
}
else
{
temporaryPage = (Page)Activator.CreateInstance(Type.GetType($"MyApp.MVVM.View.{pageName}"));
pages.Add(temporaryPage);
mainWindow.MainFrame.NavigationService.Navigate(temporaryPage);
}
}
}
并仅使用导航:
NavigationManager.Instance.NavigateTo(@"MainPages.MainPage", this);
但是在混淆之后我不能将 Type.GetType 与字符串一起使用,因为它不会只是找到它。没有混淆它工作正常。
有没有办法清除、删除、删除页面?
或者可以更正确地使用 Activator.CreateInstance(Type.GetType()) 进行混淆。
谢谢。
假设您需要混淆页面类型名称,因为您注意到您不能将Type.GetType
与字符串一起使用。 相反,您可以做一些更简单的事情——只需传入Type
。 您的NavigateTo
方法看起来像这样:
public void NavigateTo(Type pageType, MainWindow mainWindow)
{
var existing = pages.FirstOrDefault(p=>p.GetType() == pageType);
if (existing != null)
{
mainWindow.MainFrame.NavigationService.Navigate(existing);
}
else
{
temporaryPage = (Page)Activator.CreateInstance(pageType);
pages.Add(temporaryPage);
mainWindow.MainFrame.NavigationService.Navigate(temporaryPage);
}
}
要称它为你会说
NavigationManager.Instance.NavigateTo(typeof(MainPages.MainPage), this);
通过使用typeof
并传递Type
对象,您可以避免混淆,因为您的代码不再关心命名的内容。 老实说,即使没有混淆也是更好的练习。
不幸的是,我在这里看不到一些重构的方法,但这应该需要最少的重构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.