關于:我有這個 Windows 窗體應用程序,它每 60 秒從兩個常見網頁中捕獲信息,對結果進行一些簡單的字符串處理,并根據結果執行(或不執行)某些操作。其中一個站點沒有任何保護,因此我可以輕松地使用它的 HTML 代碼,HttpWebRequest并且它是HttpWebResponse.GetResponseStream(). 另一個有一些代碼保護,我不能使用相同的方法。解決方案是使用WebBrowser類來選擇站點的所有文本并復制到剪貼板,正如Jake Drew在這里發布的(方法 1)。額外的信息:當計時器達到 1 分鐘時,每個方法都使用 異步執行Task。在每個任務結束時,主線程將在這些文本中搜索一些信息,并根據結果做出一些決定。在此過程之后,即使是捕獲的文本也不再相關?;旧纤袞|西都可以從內存中抹去,因為我會在大約 1 分鐘內獲得所有新東西并處理它。問題:一切正常,但問題是它正在逐漸增加內存使用量(每次滴答大約 20mb),這是不必要的,正如我之前所說,我不需要比開始時更多地維護內存中運行的數據應用程序的執行:在比較了兩個快照之后,我找到了這 3 個對象。顯然,他們對過多的內存使用負責:因此,即使在我將主要執行放在 Tasks 中并盡我所能幫助 Garbage Collector 之后,我仍然有這個問題。我還能做些什么來避免這個問題或從內存中傾倒垃圾?編輯:這是使用以下方法捕獲頁面 HTML 的代碼HttpWebRequest: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK) { Stream receiveStream = response.GetResponseStream(); StreamReader readStream = null; if (response.CharacterSet == null) { readStream = new StreamReader(receiveStream); } else { readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet)); } PB_value = readStream.ReadToEnd(); readStream.Close(); //Ensure } response.Close(); //Ensure }
1 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
解決了:
經過一番研究,我找到了解決方案。我實際上感到有點慚愧,因為這是一個我以前從未嘗試過的非常簡單的解決方案,但分享仍然很重要。
我做的第一件事是創建一個Event
來確定我的兩個任務何時完成,然后我為這個事件分配了兩個功能。第一個函數強制垃圾收集器 ( GC.Collect()
)。第二個函數處理這兩個任務,因為所有主要過程都在它們內部完成(T.Dispose()
)。然后我得到了我想要的結果:
- 1 回答
- 0 關注
- 354 瀏覽
添加回答
舉報
0/150
提交
取消