如何提高反序列化速度?
问题描述:
使用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
。据说可以提高速度。
+0
UnsafeDeserialize 460138 ms,Deserialize 459967 ms ..即。反序列化实际上更快!我将UnsafeDeserialize的标题设置为null,这可能是原因吗? – Carlsberg 2009-10-25 14:00:02
答
在宇宙类中的可实现ISerializable
答
数据有多复杂?如果它是一个对象树(而不是一个完整的图),那么你可能会从尝试protobuf-net得到一些有趣的结果。一般来说很容易适应现有的类,并且通常要小得多,速度快而且不易碎(可以更改对象模型而不废弃数据)。
披露:我是作者,所以可能会有偏差 - 但它确实不是很糟糕......尽管如此,我乐意借给你一些时间来帮助你尝试。
* =原因
内如果让事情变得更好,而不是更坏,那么序列化格式很烂。为什么I/O绑定任务*后跟* CPU绑定任务,当你可以同时执行交叉操作? – hobbs 2009-10-25 12:05:39