C# Winform内存占用太大,求解

我要读取一个在300M左右的表。将每行内容放到List中publicstaticList<string>readTXTtoList(stringpath,boolfilt... 我要读取一个在300M左右的表。将每行内容放到List中
public static List<string> readTXTtoList(string path,bool filterSame) {
FileStream fs = new FileStream(path,FileMode.Open);
StreamReader sr = new StreamReader(fs);
List<string> strList = new List<string>();
if (filterSame)
{
while (!sr.EndOfStream)
{
string tempString = sr.ReadLine().Trim() ;
if (!"".Equals(tempString))
if (!strList.Contains(tempString))
{
strList.Add(tempString);
}
}
}
else
{
while (!sr.EndOfStream)
{
string strTemp = sr.ReadLine().Trim();
if (!"".Equals(strTemp))
strList.Add(strTemp);
}
}
sr.Close();
fs.Close();
return strList;
}
然后将其先是到DataGridView中去,代码是这样的
public DataSet GetDataSource(Hashtable htDataSource)
{
DataSet ds = new DataSet();
DataTable dt = ds.Tables.Add("FilterBlogTable");
//绘制列
dt.Columns.Add("序列", typeof(int));
dt.Columns.Add("域名", typeof(string));
dt.Columns.Add("类型", typeof(string));
int nCount = 1;
DataRow dr = null;
foreach (string domain in htDataSource.Keys) {
dr = dt.Rows.Add();
dr[0] = nCount++;
dr[1] = domain;
}
dt.Dispose();
dt = null;
dr = null;
return ds;
}
请把上面参数中的Hashtable理解成第一个方法返回的List
读取后。用任务管理器查看系统占用内存达到1G左右。
请问应该如何释放资源。
并且使用HttpWebRequest方式向list中的链接页面抓取内容的时候。
会出现内存不足的异常。查看任务管理器时。内存超过6.5G
请问应该如何解决内存释放问题。最好有例子。
提供有效解决方式追加50悬赏分。本人就这么多分了。麻烦各位大神帮忙
展开
 我来答
平梦醉神风1I
2011-07-22 · TA获得超过1510个赞
知道小有建树答主
回答量:691
采纳率:0%
帮助的人:1032万
展开全部
抓取的时候直接放到HashTable不好(当然现在都用Dictionary)

内存不足应该是HttpWebRequest这里抓取的代码问题,可以使用异步回调的方式
更多追问追答
追问
请问能不能给出异步回调的一些例子呢。对这方面不是很熟悉
由于字数限制只能写出页面抓取的部分代码
request = (HttpWebRequest)WebRequest.Create(strUrl);
sr = new StreamReader(resStream, true);
html = (sr.ReadToEnd());
return html;
只是不知道html这个对象,如何在返回后释放
追答
不是html如何返回后释放,应该是没有关闭Response,参考下

public static string GetHtml(string url, Encoding encoding)
{
string html = string.Empty;
WebRequest request = null;
WebResponse response = null;
try
{
request = WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultCredentials;
request.Timeout = 20000;
response = request.GetResponse();
html = new StreamReader(response.GetResponseStream(), encoding).ReadToEnd();
response.Close();
}
catch (System.UriFormatException uex)
{
//这里记录异常信息
}
catch (System.Net.WebException ex)
{
//这里记录异常信息
}
finally
{
if (response != null)
response.Close();
}
return html;
}
honeymaozl
2011-07-22 · TA获得超过458个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:183万
展开全部
可以直接把结果给DataSet,不需要在放入List集合,那样内存肯定不够
追问
DataSet我有用啊。list不用了。改用Hashtable了,因为要把同一个域名的链接分开,所以使用的是hashtable key对应的value是同一个域名的List没有想到更适合的方式。并且我觉得内存使用过多的最根本原因应该出在HttpWebRequest抓取页面以后。页面的内容没有释放掉。但是我的代码中是吧html的代码直接返回了。不知道怎样在返回以后。再把这个对象释放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
云南滇航软件园
2011-07-22 · TA获得超过129个赞
知道答主
回答量:155
采纳率:31%
帮助的人:22.3万
展开全部
用DataSet。或者用泛型。不需要强制转换类型。可以作为优化的办法!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
喵喵采个花
2011-07-22 · TA获得超过100个赞
知道答主
回答量:180
采纳率:0%
帮助的人:98.2万
展开全部
static
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式