我用VS2008做了一个把txt文本导入数据库的小程序,每个txt大约200M,做好之后发现,每次使用程序时,一次只能导入3、4次,然后报错内存溢出,我猜想大概是每次都把所有txt赋值给一个string,然后使用了很多replace函数,占用了大量内存,但是我用了GC.collect来回收托管资源,但是没有什么效果,现在请问前辈我的错误在哪里,怎么解决这个问题,使程序能够一直运行,(比如如何释放资源),最好能够附带代码·感激不尽···
只是占用大量资源的代码:
StreamReader MyStreamReader = new StreamReader(File.Open(textBox1.Text, FileMode.Open), System.Text.Encoding.Default);
//打开文档
string FirstLine = MyStreamReader.ReadLine();
string pat = @"\d+";
Regex NumRegex = new Regex(pat);
MatchCollection MyMathCollection = NumRegex.Matches(FirstLine);
amount = int.Parse(MyMathCollection[1].Value);
StringBuilder contentStringBuilder =new System.Text.StringBuilder();
contentStringBuilder.Append(MyStreamReader.ReadToEnd());
MyStreamReader.Close();
contentStringBuilder = contentStringBuilder.Replace('\r', '~').Replace('\n', '~');
GC.Collect();
contentStringBuilder = contentStringBuilder.Replace("~", "").Replace('\t', '\\');
GC.Collect();
contentStringBuilder = contentStringBuilder.Replace("\\\\", "").Replace("】\\", "】");
GC.Collect();
contentStringBuilder = contentStringBuilder.Replace("\\【", "【").Replace("'", "’");
GC.Collect();
关于C#中Txt 读取转换成字符串然后操作的问题,请高手指点迷津~~~
答案:4 悬赏:50 手机版
解决时间 2021-02-15 09:23
- 提问者网友:温旧梦泪无声
- 2021-02-14 17:38
最佳答案
- 五星知识达人网友:人類模型
- 2021-02-14 19:01
这和GC.Collect一点关系没有。你的代码只是一部分,还不能判断具体问题。
1.你看看有没有在循环中定义过变量,若有的话,请改在循环外侧定义。
2.用高达200m的txt作为数据源导入数据库,本身就极不合理。txt不适合存储如此大规模的数据。若一次加载入内存,很可能会造成内存溢出。
1.你看看有没有在循环中定义过变量,若有的话,请改在循环外侧定义。
2.用高达200m的txt作为数据源导入数据库,本身就极不合理。txt不适合存储如此大规模的数据。若一次加载入内存,很可能会造成内存溢出。
全部回答
- 1楼网友:人间朝暮
- 2021-02-14 21:10
你把代码贴出来看看啊?
- 2楼网友:英雄的欲望
- 2021-02-14 19:59
hgkjh
- 3楼网友:一袍清酒付
- 2021-02-14 19:35
-----
-----没试过,供参考
//StringBuilder声明为全局的
StringBuilder contentStringBuilder =new System.Text.StringBuilder();
//打开文档
try
{
string FirstLine = MyStreamReader.ReadLine();
string pat = @"\d+";
Regex NumRegex = new Regex(pat);
MatchCollection MyMathCollection = NumRegex.Matches(FirstLine);
amount = int.Parse(MyMathCollection[1].Value);
contentStringBuilder.Append(MyStreamReader.ReadToEnd());
contentStringBuilder = contentStringBuilder.Replace('\r', '~').Replace('\n', '~');
contentStringBuilder = contentStringBuilder.Replace("~", "").Replace('\t', '\\');
contentStringBuilder = contentStringBuilder.Replace("\\\\", "").Replace("】\\", "】");
contentStringBuilder = contentStringBuilder.Replace("\\【", "【").Replace("'", "’");
}
catch(……)
{}
finaly
{MyStreamReader.Close();
MyStreamReader.Dispose();
contentStringBuilder=null;
GC.Collect();
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯