这是.NET Webbrowser控件中一个众所周知的旧问题.
简介:使用.NET webbrowser控件导航到页面会增加从未释放的内存使用量.
重现内存泄漏:将WebBrowser控件添加到窗体.用它来导航到你想要的任何页面.关于:空白工作,向下滚动谷歌图像,直到您的使用量为100MB +,然后在其他地方浏览,注意几乎没有任何内存被释放是一个更戏剧性的演示.
我当前对应用程序的要求包括长时间运行它,显示有限的IE7浏览器窗口.运行IE7本身也有一些混蛋设置的钩子,BHO和组策略也是不可取的,尽管这看起来像是目前的后备.将浏览器嵌入到Windows窗体应用程序中.使用不同的浏览器基础对我来说不是一个可用的选项.IE7是必需的.
与此已知内存泄漏相关的先前主题和文章:
通常提出的修复不起作用:
关闭并重新启动整个应用程序时,将清除内存.
我愿意直接在COM或Windows API中编写自己的浏览器控件,如果这是对问题的肯定修复.当然,我更喜欢一个不太复杂的修复; 我宁愿避免降低级别来做事情,因为我不想在浏览器支持的功能方面重新发明轮子.让我们在自己动手的浏览器中复制IE7功能和非标准行为.
救命?
我想知道是否可以在OpenGL窗口中使用全屏模式和窗口模式之间来回切换(我使用C++和win32编写Windows),而不会破坏OpenGL上下文,因此不得不重新加载资源(纹理, VBO等)在这个过程中?
这是不合需要的,因为它引入了在全屏和窗口模式之间切换的延迟,可能是长的,并且通过忘记重新初始化某些东西而使得更容易搞砸.
作为后续的一部分,是否有某些视觉效果被打破这样做?
在过去的几天里,我已经做了很多搜索和阅读,尽管SDL和其他框架有很多问题导致出现同样的问题(我还没有使用它们,但是......),最好的我设法找到一个可能的领导者在后台打开1x1窗口以保留上下文,同时销毁或创建一个辅助窗口.从我发现的评论来看,这看起来似乎不可靠,而且无论如何看起来都非常笨拙.
有没有一种正确的方法来执行此操作,或者是通常给定的示例方法来破坏窗口并重新创建它,包括破坏OpenGL上下文并重新创建它?