程序占用内存越来越大,怎么办?

billsquall 2011-02-10 10:51:18
请高手告诉我,哪里的问题,怎么解决,谢谢啦
大概就是去百度搜索一个关键词,商业原因,没给出具体的关键词
然后看看百度上会不会因为这个关键词出现一些数据

只是给了个大概,请大家看一下,为什么占用内存越来越多,怎么处理?


public Form1()
{
InitializeComponent();
this.Visible = true;
bool flag = true;
while (flag)
{
HtmlDocument doc;
using (System.Net.WebClient wc = new System.Net.WebClient())
{
wc.Encoding = System.Text.Encoding.UTF8;
string url = "http://www.baidu.com";
string html = wc.DownloadString(url);
convertString2Html(html, out doc);
HtmlElement element = doc.GetElementById("search");
HtmlElementCollection elements = element.GetElementsByTagName("DIV);
string html2 = elements[0].GetAttribute("href").Replace("about:", "");
html = wc.DownloadString(url + html2);
convertString2Html(html, out doc);
element = doc.GetElementById("div1");
elements = element.GetElementsByTagName("p");
elements = elements[0].GetElementsByTagName("span");
if (elements[0].InnerText != "我的天啊")
{
flag = false;
}
url = null;
html = null;
html2 = null;
element = null;
elements = null;
doc = null;
GC.Collect();
}
//System.Threading.Thread.Sleep(30000);

}

System.Media.SoundPlayer player = new SoundPlayer(@"C:\Windows\Media\tada.wav");
player.Load();
player.PlayLooping();

}
private void convertString2Html(string html, out HtmlDocument doc)
{
WebBrowser browser = new WebBrowser();
browser.Navigate("about:blank");
browser.ScriptErrorsSuppressed = true; //屏蔽一些脚本错误
doc = browser.Document.OpenNew(true);
doc.Write(html); //写入采集过来的html文本数据
}
...全文
1142 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
coffce460 2011-02-10
  • 打赏
  • 举报
回复
在哪都行,只要一执行,任务管理器看到内存就会大幅下降
billsquall 2011-02-10
  • 打赏
  • 举报
回复
请问这句在哪使用?
coffce460 2011-02-10
  • 打赏
  • 举报
回复
System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = new System.IntPtr(5);
这句代码能大幅降低内存使用,有什么副作用就不清楚了
billsquall 2011-02-10
  • 打赏
  • 举报
回复
看你这么多徽章,应该不是疑问,是反问吧?

browser可以getelement by ID 啊

你不是让我用正则吧?
兔子-顾问 2011-02-10
  • 打赏
  • 举报
回复
WebBrowser browser = new WebBrowser();
干嘛用的?
网页源码都获得了,直接分析不就行了?
billsquall 2011-02-10
  • 打赏
  • 举报
回复
browser.Document.OpenNew(true);

这句是抄来的……

我不知道怎么把string变成html,从百度抄来一个
dodducs 2011-02-10
  • 打赏
  • 举报
回复
browser.Document.OpenNew(true);
怀疑是不是这个问题,OpenNew?
dodducs 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 moonwrite 的回复:]

System.Net.WebClient wc = new System.Net.WebClient()
另外为什么要不断地new一个出来
不能公用一个吗....
[/Quote]


他用Using包了,不应该是这个问题,虽然他这些很有问题,应该只new一个出来,但是既然有Using了就不应该是他的问题
billsquall 2011-02-10
  • 打赏
  • 举报
回复
去掉了GC.Collect();,还是没效果
moonwrite 2011-02-10
  • 打赏
  • 举报
回复
System.Net.WebClient wc = new System.Net.WebClient()
另外为什么要不断地new一个出来
不能公用一个吗....
moonwrite 2011-02-10
  • 打赏
  • 举报
回复
试试不要用
GC.Collect();

根据垃圾收集的策略是这样的
如果在调用GC的时候.....内容很多.... -_-
去掉试试看先 也可能不是这个原因
yeaicc 2011-02-10
  • 打赏
  • 举报
回复
billsquall 2011-02-10
  • 打赏
  • 举报
回复
不明白,求详解
yeaicc 2011-02-10
  • 打赏
  • 举报
回复
这样的事情交给线程去做吧。用线程池是个不错的选择。
ITcql 2011-02-10
  • 打赏
  • 举报
回复
内存释放不及时,线程.........
mzhq540203 2011-02-10
  • 打赏
  • 举报
回复
不应反复声明
mzhq540203 2011-02-10
  • 打赏
  • 举报
回复
不是反复声明,是频繁实例化,正是因为声明只是声明一次 放到循环外声明一次
绿色夹克衫 2011-02-10
  • 打赏
  • 举报
回复
还差好远呢......这样搞的话,占用个1G内存应该不是什么难事儿。lz不就是要分析html么,按照ls逍遥兄的说法,用正则或者找个HtmlParser多好,WebBrowser太耗资源了,只是支持Ajax。况且lz的程序也没有考虑webbrowser异步的问题, doc.Write(html)之后立即读取doc的内容,应该会有问题。
billsquall 2011-02-10
  • 打赏
  • 举报
回复
勋章哥果然犀利!解决了,原来是反复声明造成的……

兔子-顾问 2011-02-10
  • 打赏
  • 举报
回复
...
WebBrowser browser = new WebBrowser();
这个你反复执行没有必要。声明为字段,每次直接用可以了。
加载更多回复(3)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧