public string getHtml(string url, string charSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码
{ WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient
myWebClient.Credentials = CredentialCache.DefaultCredentials;
//从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号)
byte[] myDataBuffer = myWebClient.DownloadData(url);
string strWebData = Encoding.Default.GetString(myDataBuffer); //获取网页字符编码描述信息
Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)\"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
string webCharSet = charSetMatch.Groups[2].Value;
if (charSet == null || charSet == "")
charSet = webCharSet; if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)
strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer); return strWebData;
}这段代码是用来获取网页源码的,当反复调用时会报内存溢出错误,
这段代码哪个地方没有释放内存???
{ WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient
myWebClient.Credentials = CredentialCache.DefaultCredentials;
//从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号)
byte[] myDataBuffer = myWebClient.DownloadData(url);
string strWebData = Encoding.Default.GetString(myDataBuffer); //获取网页字符编码描述信息
Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)\"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
string webCharSet = charSetMatch.Groups[2].Value;
if (charSet == null || charSet == "")
charSet = webCharSet; if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)
strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer); return strWebData;
}这段代码是用来获取网页源码的,当反复调用时会报内存溢出错误,
这段代码哪个地方没有释放内存???
在finaly里调用一下Finalize()方法。
作用:在通过垃圾回收将 Component 回收之前,释放非托管资源并执行其他清理操作。
当然这样的话,你定义的WebClient对象就得放到try外面
参考资料:http://technet.microsoft.com/zh-cn/office/system.net.webclient_members.aspx
加上个这方法试下