向磁盘读写数十亿20位数字的最快方案:选32bit long还是打包入64bit longlong
结论先行:方案B整体速度更快,你的初步判断逻辑完全成立
核心数据对比
- 存储效率差:方案A单整数占32bit,方案B单整数平均占
64/3≈21.33bit,相同数据量下B的磁盘读写体积仅为A的66.7%,直接减少1/3的IO耗时 - 耗时差计算:按你给出的100MB/s磁盘速度计算,假设处理30亿个整数:
- 方案A总数据量12GB,纯磁盘耗时约123秒
- 方案B总数据量8GB,纯磁盘耗时约82秒,仅IO环节就节省40秒以上
- CPU开销对比:位运算打包/解包属于极轻量操作,哪怕是解释执行的VBA,处理十亿级数据的位运算耗时最多也不会超过10秒,远低于IO环节节省的时间
适用边界说明
- 只有当你的磁盘性能达到数GB/s的高端SSD水平时,才有可能出现CPU开销超过IO节省时间的情况,你当前的100MB/s IO场景下完全不需要担心
- 你采用的大区块读写策略刚好匹配方案B的操作逻辑:可以一次性读入1GB的整块数据到内存后再批量解包,避免频繁小操作的额外开销
VBA实现小提示
VBA中可以直接用LongLong类型处理64位整数,用掩码&HFFFFF(20位全1)配合位移操作即可快速完成打包解包,不需要额外引入复杂逻辑。
内容的提问来源于stack exchange,提问作者6diegodiego9
相关产品推荐
相关产品推荐

