使用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;
}
在反序列化或使用其他一些序列化技术之前,可能会读取所有内存?
答案 0 :(得分:2)
试试UnsafeDeserialize
。据说可以提高速度。
答案 1 :(得分:0)
请查看此thread。
答案 2 :(得分:0)
首先尝试将文件一次性读入内存流,然后使用内存流进行反序列化。
答案 3 :(得分:0)
数据有多复杂?如果它是一个对象 tree (而不是一个完整的图形),那么尝试protobuf-net可能会得到一些有趣的结果。 通常非常容易适应现有的类,并且通常更小,更快,更不易碎(您可以更改对象模型而不会破坏数据)。
披露:我是作者,所以可能有偏见 - 但它确实并不可怕......但我很乐意借给你一些时间来帮助你尝试它。
* =在理性之内
答案 4 :(得分:-1)
在Universe类中实现ISerializable