如何提高反序列化速度?

使用BinaryFormatter进行序列化/反序列化,生成的序列化文件大小约为80MB。 反序列化需要几分钟。 我怎么能改进这个? 这是反序列化代码:

public static Universe DeserializeFromFile(string filepath) { Universe universe = null; FileStream fs = new FileStream(filepath, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); try { universe = (Universe)bf.Deserialize(fs); } catch (SerializationException e) { Console.WriteLine("Failed to deserialize. Reason: " + e.Message); throw; } finally { fs.Close(); } return universe; } 

也许在反序列化之前读取所有内存或使用其他一些序列化技术?

尝试UnsafeDeserialize 。 据说可以提高速度。

请看一下这个post 。

尝试一次性将文件读入内存流,然后使用内存流进行反序列化。

数据有多复杂? 如果它是一个对象 (而不是一个完整的图形 ),那么你可能会从尝试protobuf-net获得一些有趣的结果。 通常很容易适应现有的类,并且通常更小,更快,更不易碎(您可以更改对象模型而不会丢弃数据)。

披露:我是作者,所以可能有偏见 – 但它确实并不可怕……我很乐意借给你一些时间来帮助你尝试它。

* =在合理范围内

在Universe类中实现ISerializable