当前位置:编程学习 > C#/ASP.NET >>

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();

这样是不行的 --------------------编程问答--------------------
引用 7 楼 air123456789 的回复:
我在想200M的txt 那得有多少字啊。

(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);
                }
            }
--------------------编程问答-------------------- 顶上去 --------------------编程问答--------------------
引用 10 楼 dibinbin8023 的回复:
引用 7 楼 air123456789 的回复:
我在想200M的txt 那得有多少字啊。

(200M*1024KB*1024K)/2K 应该就是你要得到的数字了

错了,(200M*1024K*1024B)/2B --------------------编程问答--------------------
引用 14 楼 dibinbin8023 的回复:
引用 10 楼 dibinbin8023 的回复:
引用 7 楼 air123456789 的回复:
我在想200M的txt 那得有多少字啊。

(200M*1024KB*1024K)/2K 应该就是你要得到的数字了

错了,(200M*1024K*1024B)/2B

还是错了,应该这样,(200M*1024K)/2K --------------------编程问答--------------------
引用 15 楼 dibinbin8023 的回复:
引用 14 楼 dibinbin8023 的回复:
引用 10 楼 dibinbin8023 的回复:
引用 7 楼 air123456789 的回复:
我在想200M的txt 那得有多少字啊。

(200M*1024KB*1024K)/2K 应该就是你要得到的数字了

错了,(200M*1024K*1024B)/2B

还是错了,应该这样,(200M*1024K)/2K

还是错的
应该这样(200M*1024K*1024B)/2B
这下绝对正确了!太悲剧了,老了,记忆力减退了! --------------------编程问答-------------------- 晕 我不是要算有多少字节 --------------------编程问答-------------------- 很难办 --------------------编程问答--------------------
引用 2 楼 zhouzhangkui 的回复:
一、用线程去读取 以免假死
二、如果不是同时用的数据,建议分块去读取

同意 --------------------编程问答-------------------- 现在是根本就读不出来 线程是下一步要考虑的问题 --------------------编程问答-------------------- 数据流??
晚上做个测试试试。这个确实是个挑战哈。。
先入库在读取怎么样??不过原则是标准文件,可以直接导入......... --------------------编程问答-------------------- 看你要处理的具体业务了.
一下子把200M的文本放到内存中几乎不可能,除非你用64位系统+8G内存. --------------------编程问答-------------------- 我曾经把50M的为本直接放入内存,结果实际占用内存将近1G,按此推算,200M要占4G,32位系统的内存寻址控件也不过3.2G,你怎么读啊 --------------------编程问答--------------------
引用 7 楼 air123456789 的回复:
我在想200M的txt 那得有多少字啊。


这个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();
--------------------编程问答-------------------- 看你要做什么样的处理了,一般这么大的都做分段处理。。。使用栈的形式处理。这里的栈不是内存栈,说的是使用栈的那种数据进程原则
--------------------编程问答-------------------- 干嘛不每次读取一部分呢   这样也可以正则 --------------------编程问答-------------------- 看看能不能分块 --------------------编程问答--------------------
引用 28 楼 whb147 的回复:
看看能不能分块

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,