C# 解析与序列化

C# 解析与序列化,c#,parsing,C#,Parsing,我有一个文件的格式如下: 1 4298 3598 39980 58903 39 3598 395 395 3598 3598 所以每行上只有一组数字(32位有符号整数范围内的最大数字) 我当前的代码每次都要解析它,首先将行拆分为一个字符串数组,然后将每个字符串转换为一个int。有没有更快的方法可以通过序列化或其他方式来完成这项工作,因为我必须多次浏览同一个文件。换句话说,我很乐意对文件进行预处理。 < P>如果数据是静态的而不是很大的,那么你可能需要考虑将它转换为源代码并编译成程序/系统。<

我有一个文件的格式如下:

1 4298 3598 39980 58903
39 3598 395 395 3598 3598
所以每行上只有一组数字(32位有符号整数范围内的最大数字)


我当前的代码每次都要解析它,首先将行拆分为一个字符串数组,然后将每个字符串转换为一个int。有没有更快的方法可以通过序列化或其他方式来完成这项工作,因为我必须多次浏览同一个文件。换句话说,我很乐意对文件进行预处理。

< P>如果数据是静态的而不是很大的,那么你可能需要考虑将它转换为源代码并编译成程序/系统。< /P> < P>序列化是关于获取对象的内存映像并将其发送或读取字节。因此,除非您可以强制
列表
使用该格式,否则序列化将不会帮助您。

为什么不使用二进制格式的文件?如果您只是尝试获取数值,那么字符串转换是完全不必要的。一次读取四个字节,并通过位操作使用它们创建一个整数。序列化是一种默认机制,旨在为程序员提供一种简单的存储对象的方法,但经过精心规划的文件格式将更容易、更快地解析。

如果您不介意放弃人类可读性,可以将文件中的每个int编码为char。可以使用Convert.ToChar(Int32)和Convert.ToInt32(char)进行转换。您需要测试性能,并确保在int的char表示不是有效字符时不会遇到问题。

我不确定您在做什么-将这样的文件解析为一个整数值列表就像什么,3行代码;我看不出您希望如何从中“省去很多解析工作”-请指定.Errr。。如果代码可以以二进制格式读取并假设它是32位的数字,那么就可以避免很多CPU周期。这个文件非常非常大,我必须检查它数千次(内存中没有任何内容)。我无法缓存它,它太大了。如果你逐行阅读,你当前的逻辑对我来说很好。唯一需要注意的是,如果需要一次又一次地引用该行,请将其缓存到内存中,而不是再次读取。另外,如果你必须一行接一行地处理n行,只需打开你的文件句柄(这样你就不必再次打开并查找文件中的相关位置)。只需阅读注释-文件很大-实际有多大?无论如何,你可以在缓存最近使用(或最常用)的行的地方实现缓存。这就是我所追求的,你能给我一些c代码的想法,让我知道正确的方向吗?我可以用c来做,但我用的是c,据我所知,我不能做不安全的魔术。不幸的是,我不知道c,但在搜索时,我发现微软提供了BinaryReader和BinaryWriter类。