如何提高反序列化速度?
使用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