最近一直在搞文件(cap格式)的读取解析,程序在解析大文件时就挂了
目前我的程序500M以下的文件可以正常读取解析。速度和性能还可以接受(200M 耗时20S左右)。但500M以上的话,内存增长导致内存溢出的问题。使的我很郁闷,始终没解决。在此向各位高手请教~~大家一起来学习。程序中我使用了:分块解析一个大文件和多线程。之前查过有别人说用到“内存映射”技术。本人刚接触C#,对那个技术还不了解。希望各位歌手指点!!!

解决方案 »

  1.   

    下面是我读文件的代码        private const int bufferSize = 1024 * 1000; // 定义每次读取文件大小为 1024 * 100=10M
            private  void SplitPacketParse()
            {
                FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                byte[] ReadArray = new byte[bufferSize];
                byte[] HeaderData = new byte[24];
                
                fileStream.Read(HeaderData, 0, 24);
                int incnum = fileStream.Read(ReadArray, 0, bufferSize);            while( incnum > 0)
                {
                    
                    ParseOff();    //
    ......
    // 再此读文件
                    incnum = fileStream.Read(ReadArray, 0, bufferSize);
                }
                fileStream.Close();
            }
      

  2.   

    “cap”是什么格式的文件?“在读取1G以上的文件时,内存和数据如何申请和保存呢”,
    的确,通常的做法都是完整读入内存,再进行解析,这里我提供一个思路:XmlReader 类 ,听说过吧,它就是为解决XmlDocument读大的xml文件,须一次性读入内存带来的副作用而产生的。它不需要一次性读入,提供 XML 数据进行快速、非缓存、只进访问的读取器,每次读入一个节点,由应用来决定解析!楼主,你可以通过反射器看看XmlReader 的Read函数如何实现的,理解后,写出自己的cap流模式解析类。