簡體   English   中英

Application.DoEvents內存泄漏?

[英]Application.DoEvents memory leak?

我正在瀏覽網站列表並抓住他們的內容。 我這樣做是首先將網頁作為字符串,然后嘗試通過其DocumentText屬性將其推送到System.Windows.Forms.WebBrowser對象。

這是代碼的一部分:

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循環之前,內存使用量不會增加太多,然后RAM使用率會上升大約800kb。 我正在瀏覽幾千頁,所以在很短的時間內使用數百個megs找到我的程序有點令人擔憂。

是否有一個更簡單的解決方案從站點獲取完整的HTML文檔,允許在不泄漏內存的情況下進行代碼內DOM遍歷?

應用程序關閉時內存是否無法釋放? 我希望在下載頁面時內存使用率會增加。

我懷疑Application.DoEvents()存在內存泄漏但確實有一個更簡單的相對輕量級選項:使用HtmlagilityPack代替,這將使您能夠執行所需的所有HTML解析而無需實例化WebBrowser對象。

我希望在將頁面加載到WebBrowser控件中時使用內存。 如果內存永遠不會釋放,那只是內存泄漏; 考慮到IE的復雜性,我不想猜測何時會釋放內存。

是否有一個更簡單的解決方案從一個允許代碼內DOM的網站抓取一個完整的HTML文檔?

要從內存中的HTML頁面中提取內容,而不先將其加載到WebBrowser控件中,請嘗試使用HTML Agility Pack: http//htmlagilitypack.codeplex.com/

您可以使用HTML Agility Pack來實現您正在尋找的結果。 順便說一句,我懷疑它是漏網的Web瀏覽器控件 - 如果控件沒有完全加載並且你加載其他東西,它只會泄漏前一頁的內存(恕我直言)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM