首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Application.DoEvents内存泄漏?

Application.DoEvents内存泄漏?
EN

Stack Overflow用户
提问于 2011-02-22 00:06:55
回答 4查看 1.1K关注 0票数 1

我正在浏览一个网站列表,抓取它们的内容。为此,我首先将网页作为字符串获取,然后尝试通过其DocumentText属性将其放入System.Windows.Forms.WebBrowser对象中。

下面是代码的一部分:

代码语言:javascript
复制
if (!String.IsNullOrEmpty(siteAddress))
                webReq = WebRequest.Create(siteAddress);

            WebResponse webRes = webReq.GetResponse();

            Stream streamResponse = webRes.GetResponseStream();
            StreamReader streamRead = new StreamReader(streamResponse);
            Char[] readBuff = new Char[256];
            int count = streamRead.Read(readBuff, 0, 256);
            string fullHTML = "";
            while (count > 0)
            {
                String outputData = new String(readBuff, 0, count);
                fullHTML += outputData;
                count = streamRead.Read(readBuff, 0, 256);
            }

            //Close the Stream object.
            streamResponse.Close();
            streamRead.Close();

            //Release the HttpWebResponse Resource.
            webRes.Close();

            //Convert string to HTML document                
            WebBrowser webControl = new WebBrowser();
            webControl.ScriptErrorsSuppressed = true;
            webControl.DocumentText = fullHTML;
            do
            {
                Application.DoEvents();
            } while (webControl.ReadyState != WebBrowserReadyState.Complete);

这在某种程度上是可行的-我可以通过过滤标签来拆分HTML,等等。顾名思义,问题在于存在某种类型的内存泄漏,特别是在Application.DoEvents()循环期间。有人知道这是怎么回事吗?在完成do循环之前,内存使用量不会增加很多,然后内存使用量会增加大约800kb。我正在浏览几千页,所以发现我的程序在短时间内使用了数百个兆,这有点令人担忧。

有没有一种更简单的解决方案,可以从站点获取完整的HTML文档,允许在不泄漏内存的情况下进行代码内DOM遍历?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-22 00:14:00

您也许能够使用HTML Agility Pack来实现您想要的结果。顺便说一下,我怀疑是web浏览器控件在泄漏-如果控件没有完全加载,而你加载了其他东西,它只会泄漏前一页的内存(IMHO)。

票数 1
EN

Stack Overflow用户

发布于 2011-02-22 00:09:39

当你的应用程序关闭时内存不会释放吗?当页面被下载时,我预计内存使用量会增加。

票数 1
EN

Stack Overflow用户

发布于 2011-02-22 00:10:45

我怀疑Application.DoEvents()是否存在内存泄漏,但确实有一个简单得多的相对轻量级的选择:使用HtmlagilityPack,这将使您能够执行所需的所有WebBrowser解析,而不必实例化WebBrowser对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5068221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档