问题描述
用的是批插的方式sqlBC.WriteToServer(dt);之前数据量不是太大,三四十万笔,速度还行,三四十秒现在数据量变得很大,txt档150M左右,数据近100W,//事务处理插入数据库中publicvoidExesql(){//调用方法TxtFileToStr()stringstr=TxtFileToStr();string[]sql=str.Split(',');//得到string数组intnum=sql.Length-1;一次事务处理直接内存溢出,请问如何分批处理呢?求人指导,程式已经执行不成功了,现在都我手动在处理,头大了.//读出文本的内容privatestringTxtFileToStr(){stringFilePath=System.Configuration.ConfigurationSettings.AppSettings["FilePath"];//得到文本路径Console.WriteLine(FilePath);FileInfofile=newFileInfo(FilePath);FileStreamfs=file.OpenRead();StreamReadersr=newStreamReader(fs,System.Text.Encoding.GetEncoding("utf-8"));sr.BaseStream.Seek(0,SeekOrigin.Begin);stringstr=sr.ReadToEnd();fs.Close();sr.Close();returnstr;}
解决方案
解决方案二:
能确定内存溢出发生在哪吗?sqlBC.WriteToServer(dt);我猜想你是把数据一次读取,然后构造了一个datatable,对吧?
解决方案三:
估计stringstr=sr.ReadToEnd();这里都受不了分段读取试试
解决方案四:
http://bbs.csdn.net/topics/340168938
解决方案五:
Seek的时候分段读
解决方案六:
可能出的问题原因1:每个数值类型的值都是有上限的,从你写的程序上看你应该是将文本的内容全部一次性读去了,可能超了string,string[]或,int中某项的内存分配的上限了可能出的问题原因2:数据量太大,内存资源回收不够及时,新数据持续写入导致的溢出解决办法(仅供参考)1,换个更大数值类型2,分批次读取3,每次往数据库中插入完一条数据后,写个方法,让程序立刻把这部分在内存中已经没用的数据(内存应该还没释放),回收掉,释放内存
解决方案七:
大量的数据可能要分段处理,
解决方案八:
引用1楼lostuser的回复:
能确定内存溢出发生在哪吗?sqlBC.WriteToServer(dt);我猜想你是把数据一次读取,然后构造了一个datatable,对吧?
是的.
解决方案九:
每100行操作,使用文件指针