Jef*_*Pry 6 c# binary binaryfiles large-data
我有一个大约400 GB的大文件.每天由外部封闭系统生成.它是一个二进制文件,格式如下:
byte[8]byte[4]byte[n]
Run Code Online (Sandbox Code Playgroud)
其中n等于byte [4]的int32值.
此文件没有分隔符,要读取整个文件,您只需重复直到EOF.每个"项"表示为字节[8]字节[4]字节[n].
该文件看起来像
byte[8]byte[4]byte[n]byte[8]byte[4]byte[n]...EOF
Run Code Online (Sandbox Code Playgroud)
byte [8]是一个64位数字,表示由.NET Ticks表示的一段时间.我需要对此文件进行排序,但似乎无法找出最快的方法.
现在,我将Ticks加载到struct和byte [n]的开始和结束位置,并读取到文件的末尾.在此之后,我通过Ticks属性在内存中对List进行排序,然后打开BinaryReader并以Ticks顺序查找每个位置,读取byte [n]值,并写入外部文件.
在过程结束时,我最终得到一个已排序的二进制文件,但它需要FOREVER.我正在使用C#.NET和一个非常强大的服务器,但磁盘IO似乎是一个问题.
服务器规格:
我看过整个互联网,只能找到一个巨大的文件是1GB的例子(让我轻笑).
有人有建议吗?
加速这种文件访问的好方法是将整个文件内存映射到地址空间,并让操作系统负责读取所需文件中的任何位.所以做你现在正在做的事情,除了从内存中读取而不是使用BinaryReader/ seek/read.
你有很多主内存,所以这应该提供相当好的性能(只要你使用的是64位操作系统).
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |