最近一直在搞文件(cap格式)的读取解析,程序在解析大文件时就挂了
目前我的程序500M以下的文件可以正常读取解析。速度和性能还可以接受(200M 耗时20S左右)。但500M以上的话,内存增长导致内存溢出的问题。使的我很郁闷,始终没解决。在此向各位高手请教~~大家一起来学习。程序中我使用了:分块解析一个大文件和多线程。之前查过有别人说用到“内存映射”技术。本人刚接触C#,对那个技术还不了解。希望各位歌手指点!!!
目前我的程序500M以下的文件可以正常读取解析。速度和性能还可以接受(200M 耗时20S左右)。但500M以上的话,内存增长导致内存溢出的问题。使的我很郁闷,始终没解决。在此向各位高手请教~~大家一起来学习。程序中我使用了:分块解析一个大文件和多线程。之前查过有别人说用到“内存映射”技术。本人刚接触C#,对那个技术还不了解。希望各位歌手指点!!!
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();
}
的确,通常的做法都是完整读入内存,再进行解析,这里我提供一个思路:XmlReader 类 ,听说过吧,它就是为解决XmlDocument读大的xml文件,须一次性读入内存带来的副作用而产生的。它不需要一次性读入,提供 XML 数据进行快速、非缓存、只进访问的读取器,每次读入一个节点,由应用来决定解析!楼主,你可以通过反射器看看XmlReader 的Read函数如何实现的,理解后,写出自己的cap流模式解析类。