永发信息网

关于C#中Txt 读取转换成字符串然后操作的问题,请高手指点迷津~~~

答案:4  悬赏:50  手机版
解决时间 2021-02-15 09:23
我用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();
最佳答案
这和GC.Collect一点关系没有。你的代码只是一部分,还不能判断具体问题。

1.你看看有没有在循环中定义过变量,若有的话,请改在循环外侧定义。
2.用高达200m的txt作为数据源导入数据库,本身就极不合理。txt不适合存储如此大规模的数据。若一次加载入内存,很可能会造成内存溢出。
全部回答
你把代码贴出来看看啊?
hgkjh
----- -----没试过,供参考 //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(); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如家酒店嘉兴江南大厦店地址在哪,我要去那里
宜良有什么旅游景点
武汉香辣鸭脖地址有知道的么?有点事想过去
为什么我的CF打完黑色城镇的经验金币都是0呢
于姐孕妇装专卖店地址好找么,我有些事要过去
魅族PRO6s相机怎么样
吉颂雅品牌的酒坛怎么样
紫薇星健康中心地址有知道的么?有点事想过去
班级里有内鬼怎么查出来
我梦到 老鹰 咬我 咬到我的 腿 出血了 而且
噶豆时尚童装主题店地址在什么地方,我要处理
依折服饰(县前街店)地址有知道的么?有点事想
京东会员plus专享众测怎么填写申请优势
做油饼用高筋面粉吗?
光纤路由器是不是有一个专用连接光纤猫的接口
推荐资讯
s瘦草本植物固体饮料是饭后吃还是饭前吃啊
贵州明泽水泥制品公司地址在什么地方,想过去
我以前是玩LOL的现在想去玩DOTA2我该注意些什
希望你们好好的,我自己可以承受一切的韩语
器灵一共多少集
金东阿酒多少钱
一路夜盛开的是你不知情的喜欢!一转身静载的
保渡灯具城地址有知道的么?有点事想过去
蓝语网咖怎么去啊,有知道地址的么
走路脚偏怎么办
刚生下三天的奶猫,有一只喝母猫的奶,其他的
一道关于负数的题在下列选项中,具有相反意义
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?