该数组具有重复的元素,其顺序很重要(必须保留)。我必须不断地保存/加载数百个这些文件,每个文件可能包含最多100,000个元素的数组。
下面的代码是我当前正在保存/加载文件的一个示例。由于IO速度较慢,我通过在序列化之前将枚举转换为字节(将文件大小减小10倍)而获得了显着的速度改进。我不确定我是否应该使用BinaryFormatter。
我仍在寻求改进,因为一切应该尽快完成,我目前正在做的更好的选择吗?你会怎么做?
state
编辑:基于杰里米建议的新代码,该代码正在运行,我将尝试测试其性能并将结果尽快发布在这里。
screen
答案 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);
当然这不是免费的操作,但是即使对于大型阵列,它也应该相当快。