c# 读取200m以上的txt文件 怎么处理
c# 读取200m以上的txt文件 怎么处理 --------------------编程问答-------------------- 有困难! --------------------编程问答-------------------- 一、用线程去读取 以免假死二、如果不是同时用的数据,建议分块去读取 --------------------编程问答-------------------- 必须要全部取出来 然后正则去分析 --------------------编程问答-------------------- 异步操作 --------------------编程问答-------------------- 自己分段页 --------------------编程问答-------------------- 可以尝试读取过程用StringBuilder进行,完成后再生成一个String 。可能稍微快一点。 --------------------编程问答-------------------- 我在想200M的txt 那得有多少字啊。 --------------------编程问答-------------------- StringBuilder 试过 直接报内存不足了 --------------------编程问答-------------------- StringBuilder sb = new StringBuilder();
StreamReader sr = new StreamReader(@"D:\****");
string str = sr.ReadLine();
while (str!=null)
{
str = sr.ReadLine();
sb.Append(str);
}
textBox1.Text = sb.ToString();
这样是不行的 --------------------编程问答--------------------
(200M*1024KB*1024K)/2K 应该就是你要得到的数字了 --------------------编程问答-------------------- 友情帮顶 --------------------编程问答--------------------
//试试这样行不--------------------编程问答-------------------- 顶上去 --------------------编程问答--------------------
StringBuilder sb = new StringBuilder();
StreamReader sr = new StreamReader(@"D:\****");
string str = sr.ReadLine();
List<string> strList = new List<string>();
int length = 1024 * 512;//在测试中自己调调大小
while (str != null)
{
str = sr.ReadLine();
sb.Append(str);
if (sb.Length >= length)
{
strList.Add(sb.ToString().TrimEnd());
sb.Remove(0, sb.Length);
}
}
错了,(200M*1024K*1024B)/2B --------------------编程问答--------------------
还是错了,应该这样,(200M*1024K)/2K --------------------编程问答--------------------
还是错的
应该这样(200M*1024K*1024B)/2B
这下绝对正确了!太悲剧了,老了,记忆力减退了! --------------------编程问答-------------------- 晕 我不是要算有多少字节 --------------------编程问答-------------------- 很难办 --------------------编程问答--------------------
同意 --------------------编程问答-------------------- 现在是根本就读不出来 线程是下一步要考虑的问题 --------------------编程问答-------------------- 数据流??
晚上做个测试试试。这个确实是个挑战哈。。
先入库在读取怎么样??不过原则是标准文件,可以直接导入......... --------------------编程问答-------------------- 看你要处理的具体业务了.
一下子把200M的文本放到内存中几乎不可能,除非你用64位系统+8G内存. --------------------编程问答-------------------- 我曾经把50M的为本直接放入内存,结果实际占用内存将近1G,按此推算,200M要占4G,32位系统的内存寻址控件也不过3.2G,你怎么读啊 --------------------编程问答--------------------
这个MM每次的回答都很幽默!~ --------------------编程问答-------------------- 边读边处理,不要全部放到内存中
new Thread((ThreadStart)delegate
{
StreamReader sr = new StreamReader(FileName, Encoding.GetEncoding("gb2312"));
int line = 0;
string line= sr.ReadLine();
while (line!="")
{
line= sr.ReadLine();
}
sr.Close();
}).Start();
--------------------编程问答-------------------- 看你要做什么样的处理了,一般这么大的都做分段处理。。。使用栈的形式处理。这里的栈不是内存栈,说的是使用栈的那种数据进程原则
--------------------编程问答-------------------- 干嘛不每次读取一部分呢 这样也可以正则 --------------------编程问答-------------------- 看看能不能分块 --------------------编程问答--------------------
up --------------------编程问答-------------------- 分块读取吧。
不过,200M的TXT…… --------------------编程问答--------------------
FileInfo fi = new FileInfo(filePath);
FileStream fs = fi.OpenRead();
byte[] imageData = new byte[fi.Length];
fs.Read(imageData, 0, Convert.ToInt32(fi.Length));
fs.Close();
有试过将600MB的文件读入,不过时间好长啊。 --------------------编程问答-------------------- 学习一下.... --------------------编程问答-------------------- LZ可以找一些工具,把正则转为状态机,用状态机处理替换的话,1M内存都不用,直接在流里面就可以搞定了。
另外25楼wuyq11的方法也是不错的,内存占用不大,除非极端的情况出现,就是所有内容都在1行里,那就只能靠状态机了。 --------------------编程问答-------------------- 肯定要一块一块读了。 --------------------编程问答-------------------- 人工分割啊,然后一个一个小文件读
补充:.NET技术 , C#