将enum [](字节)保存/加载到文件的最快方法

时间:2020-06-02 03:53:59

标签: c# optimization serialization

该数组具有重复的元素,其顺序很重要(必须保留)。我必须不断地保存/加载数百个这些文件,每个文件可能包含最多100,000个元素的数组。

下面的代码是我当前正在保存/加载文件的一个示例。由于IO速度较慢,我通过在序列化之前将枚举转换为字节(将文件大小减小10倍)而获得了显着的速度改进。我不确定我是否应该使用BinaryFormatter。

我仍在寻求改进,因为一切应该尽快完成,我目前正在做的更好的选择吗?你会怎么做?

state

编辑:基于杰里米建议的新代码,该代码正在运行,我将尝试测试其性能并将结果尽快发布在这里。

screen

1 个答案:

答案 0 :(得分:2)

当您尝试直接将byte[]分配给枚举数组时,C#编译器会抱怨。运行时不在乎。

var bytes = File.ReadAllBytes(path);
myDogs = (DogBreed[])(object)bytes;

VS调试器将显示myDogs实际上是一个字节数组,但是从该数组访问元素就可以了。

更新;

ArgumentException:对象必须是原始数组。

所以File.WriteAllBytes()不喜欢被enum[]欺骗。您应该能够使用Array.Copy快速将枚举值复制到byte[]中。

   var buffer = new byte[myDogs.Length];
   Array.Copy(myDogs, buffer, myDogs.Length);
   File.WriteAllBytes(path, buffer);

当然这不是免费的操作,但是即使对于大型阵列,它也应该相当快。

相关问题