.NET Web浏览器控制和Dispose()

2023-12-11

我知道这是一个热门话题,有很多问题和答案,但我仍然没有找到以下问题的解决方案:

我有一个多选项卡应用程序。每个选项卡上都有一个 Webbrowser 控件。 由于网络浏览器为每个新选项卡占用更多内存,并且它们不会在选项卡关闭时释放此内存,因此我决定在选项卡关闭事件处理程序中创建一个 Webbrowser.Dispose() 。这帮助我解决了内存泄漏问题。关闭后,所有使用的 RAM 现在都是空闲的。

但这导致了一个新问题:在第一个 Dispose() 之后,似乎所有其他 Webbrowser 对象的会话都被销毁了。 通常我只登录第一个网络浏览器。如果我添加几个选项卡,我通常会自动登录。在第一个 Dispose() 之后,这不再起作用,我必须在每个新选项卡上登录。

我尝试保留旧的 cookie 并使用新的网络浏览器再次发送它们,但这并没有解决问题。看来是被毁了。


这似乎是一个垃圾收集器问题。你可以尝试使用肮脏的方式System.GC.Collect(),只是调用垃圾收集器来释放内存,但这并不是解决问题的好方法。

根据你所说,这似乎是一个指针问题。 如果将 Connection 声明为全局变量,则必须先将连接与选项卡分离,然后才能关闭/处置选项卡本身。事件我.结束语应该可以帮助你做到这一点。 如果指针保持打开状态,则选项卡作为对象仍然连接在连接上,并且将(不太确定)if/when)没有被 GC 清理。

如果您可以澄清复制/引用连接的方式,我可以给出更详细的答案。

EDIT:经过一段时间的研究,我的担忧变成了现实 - IE 下的缓存存在问题(据我所知> 5)。http://social.msdn.microsoft.com/Forums/ie/en-US/88c21427-e765-46e8-833d-6021ef79e0c8/memory-leak-in-ie-webbrowser-control

建议是:

  • 手动调用垃圾收集器

  • 限制 MemUsage(可能导致应用程序崩溃,并且仅将页面写入磁盘)

  • about:blanc 覆盖缓存条目

  • 调用 C++ 方法来覆盖缓存(WinINet - 我发现的所有结果都导致了一些 ProtectedMemory-Errors - 也许是这个C# WebBrowser控件:清除缓存而不清除cookie works)

  • 使用 C++ 和 WinINet (我不知道任何真正的 .Net 实现,它也可能存在内存泄漏)

  • 使用 IE 的替代品,例如 gecko (Mozilla) -https://bitbucket.org/geckofx/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET Web浏览器控制和Dispose() 的相关文章

随机推荐

  • VirtualWebappLoader 或类似的WebLogic 将目录添加到war 的类路径中?

    如何在部署到 WebLogic 的 war 的类路径上提供外部目录 将在其中部署其他 jar 我熟悉如何通过定义一个在 Tomcat 上执行此操作Loadercontext xml 中的元素并包括virtualClasspath指定的属性A
  • 底层连接已被 linkedin 关闭

    我们有一个使用 Net Framework 4 6 1 运行的应用程序 可以访问 Linkedin 调用端点 https www linkedin com oauth v2 accessToken 它一直工作到 2020 年 7 月 14
  • C结构数组初始化

    我有结构 struct ABC int a int b 和它的数组 struct ABC xyz 100 我想初始化它 a 10 和 b 20 对于所有数组元素 哪种方法更好 虽然没有特别优雅的方式初始化在C语言中像这样的大数组是可能的 你
  • 在 javascript 服务器端连接 MySQL,无需使用 Node.js

    我有一个与服务器一起运行的 JavaScript 应用程序 例如nginx or eclipse local server 我想知道是否可以将其与mysql服务器数据库连接 我知道他们有很多npm packages for nodejs应用
  • jQuery:取消绑定事件处理程序以稍后再次绑定它们

    有谁知道如何取消绑定事件处理程序集 但记住它们以便稍后再次绑定它们 有什么建议么 项目的数据中有一个事件元素 这应该可以开始 您可以在解除绑定之前读取元素并将处理程序存储在数组中 如果您需要更多帮助 请发表评论 我通过阅读 fn clone
  • NLTK导入错误

    我是 Python 和 NLTK 的新手 我一直在尝试寻找解决问题的方法 但尚未找到解决方案 希望有人可以帮助我 我目前运行的是 64 位 Windows 8 我已按照 NLTK 网站上的说明进行操作 http www nltk org i
  • 如何在 FileOpen 对话框中禁用 Shell 扩展

    我说的是 Windows shell 扩展 我有一个 shell 扩展 它可以显示我的自定义文件类型的特定属性 例如 filetype 当然 这会导致我的 shell 扩展 dll 被加载到 explorer exe 进程中 但现在如果我在
  • 是否应该谨慎使用 FirebaseDatabase.getInstance()?

    例如 当我在 android 中使用 SQLiteDatabase 时 打开 关闭大量 SQLiteDatabase 助手通常不是一个好主意 相反 最好创建一种单例 以确保只打开 1 个数据库 假设我有一个带有静态方法的类 它执行大量需要
  • 如何在Android中使用自定义日历视图以及如何设置提醒提醒?

    我需要制作一个 Android 应用程序来显示日历控件 我曾试图在Android提供的默认小部件中找到这样的控件 但没有找到 如何在Android应用程序中集成日历控件 我还希望日历能够添加特定日期的事件和提醒 在计时器中同时播放 2 个声
  • 如何使用numpy将RGB图像转换为基于颜色的one-hot编码3d数组?

    简而言之 我想做的与这个问题类似 将 RGB 图像转换为索引图像 但我想要获取 n 通道图像 而不是 1 通道索引图像 其中img h w 是一个one hot编码向量 例如 如果输入图像是 0 0 0 255 255 255 索引 0 分
  • MediaCodec 编码视频底部有绿条且色度搞砸

    我开始了一个项目Grafika并对其进行了修改 我有一个框架 与原始框架没有太大不同 它可以捕获来自Camera并同时以不同的分辨率将其连续编码为视频 MediaCodec 用于编码 配置为使用COLOR FormatSurface为了让我
  • 当使用“all one word”时,有什么方法可以使 html 文本换行吗? [复制]

    这个问题在这里已经有答案了 可能的重复 有没有办法在 div 中自动换行 我有这个 css 和 html 问题 我有一个描述 我想将其放入一个 100 像素宽的框中 并且我希望文本沿着页面向下流动 我设置了一个这样的div div styl
  • SVG 在 Firefox 中完全不可见

    在将其标记为重复之前 我们已经确保宽度和高度设置正确 我将其描述为不可见 因为尽管它占用了正确的空间 甚至以正确的尺寸加载到图像上 但图像的内容在网站 网络选项卡以及直接查看 SVG 时都是空的 基本上 无论我们如何显示或查看它 实际的 S
  • OpenGL-ES 2.0 中未声明 glMapBuffer

    我正在 ubuntu 10 10 中通过使用 kronos 和 pvrsd kNow 代码进行 Opengl es 2 0 include
  • 懒惰、贪婪和所有格量词之间有什么区别?

    以下量词在场景 速度等方面有何不同 and 全部匹配0或1次 and 全部匹配0次或多次 and 全部匹配1次或多次 and are greedy and are 不情愿 懒惰 and are 所有格 谁能帮助我理解这些术语的含义 为什么同
  • 使用 Web 客户端 DownloadFileAsync 多个文件

    描述使用 webclient 的 DownloadFileAsync 下载多个文件 并利用文本文件作为 URL 输入进行下载 Problem我使用的方法根本不会下载文件 只是运行 什么也不做 它填充列表数组 然后退出程序而不下载单个文件 我
  • 节点removeListener不起作用

    尝试使用以下代码删除侦听器 var EventEmitter require events EventEmitter var emitter new EventEmitter emitter on message function text
  • iOS PencilKit 无法绘图

    我正在尝试使用 PencilKit 但无法在应用程序中绘制任何内容 我设置我的代码如下 import UIKit import PencilKit class DrawingViewController UIViewController v
  • 使用 Terraform 的 helm_release,如何设置数组或列表值?

    例如 根据Drupal 的 helm 图表文档 默认值accessModes is ReadWriteOnce 其在 YAML 中转换为以下内容 accessModes ReadWriteOnce 使用 Terraform 时舵释放资源 以
  • .NET Web浏览器控制和Dispose()

    我知道这是一个热门话题 有很多问题和答案 但我仍然没有找到以下问题的解决方案 我有一个多选项卡应用程序 每个选项卡上都有一个 Webbrowser 控件 由于网络浏览器为每个新选项卡占用更多内存 并且它们不会在选项卡关闭时释放此内存 因此我