作者:ga70752ga你 | 来源:互联网 | 2023-10-12 15:55
我正在开发一个具有一个主容器的MVVM(WPF)应用程序。显示的视图取决于所选的菜单项(例如主页,产品信息等)。每当首次访问视图时,由于实例化关联的视图模型,因此内存消耗会略有增加。当进一步访问同一视图时,由于使用了关联视图模型的现有实例,因此内存保持不变。
但是,一个包含WebBrowser
控件的视图每次无一例外地访问都会增加〜80MB的内存使用;此内存永远不会被释放-在Home和该视图之间反复切换会导致应用程序内存不足并崩溃。通过使用内存探查器,我发现这种增加发生在非托管代码中,尤其是user32.dll
。
在查看其他StackOverflow帖子时,我注意到WebBrowser
经常出现问题并且内存泄漏,但是大多数帖子都指出这是IE7的问题。我们正在为应用程序强制使用IE11。我需要一些帮助调查此问题和可能的解决方案。恐怕我无法发布代码,但是任何提示都会有所帮助。
我发现了问题,并且与WebBrowser
控件泄漏无关。代码(我没有写)将WebBrowser
的实例从视图传递到视图模型,从而使视图模型包含对视图的硬引用。由于视图模型的寿命与应用程序的寿命相对应,因此永久保留了对视图的那些引用。用适当的逻辑替换该逻辑可解决此问题。