我正在努力处理二进制(文件)数据(在 c# 中)。这是这种情况:
我有一个可以小至 1 MB 和大至 60 GB 的二进制文件,因此无法装入内存(假设具有 2 GB 内存的慢速笔记本电脑,运行 32 位和 64 位窗口)。例如,该文件包含来自一个时基的 20 个源的数据。该文件的标题没有告诉我信号的长度,这意味着每个信号的长度可以(并且大多数情况会)不同。因此,我不知道一个信号正手包含的字节数。另请注意,数据沿文件的间距不均匀。因此,我必须在文件中搜索与相应信号样本匹配的标识符(2 个字节)。
其次,我需要处理这些数据并将其存储在一个新的二进制文件中。文件大小将大致相同。但是二进制格式完全不同。实际上它是一种 Matlab 二进制文件格式。
这些是挑战:
- 由于 Matlab 二进制文件需要信号头中的信号长度(以字节数给出),我需要知道正手的长度。或者,或者在最后返回写入的二进制文件并存储长度。
- 性能需要非常好。Target 正在接近硬盘的 r/w 速度,因此 CPU 时间需要较低。
- 由于数据不适合内部存储器,我需要一些分块处理。但是如何正确限制块大小,以便在不牺牲性能的同时不会出现内存溢出异常?
我已经尝试过要读取的文件的内存映射,但我坚持这一点,因为我需要沿着完整的文件搜索以了解信号的长度。
什么是完成上述工作的好方法?