C# 如何提高反序列化速度?
使用BinaryFormatter序列化/反序列化,得到的序列化文件大小约为80MB。反序列化需要几分钟的时间。我该如何改进这一点?以下是反序列化代码:C# 如何提高反序列化速度?,c#,performance,serialization,binaryformatter,C#,Performance,Serialization,Binaryformatter,使用BinaryFormatter序列化/反序列化,得到的序列化文件大小约为80MB。反序列化需要几分钟的时间。我该如何改进这一点?以下是反序列化代码: public static Universe DeserializeFromFile(string filepath) { Universe universe = null; FileStream fs = new FileStream(filepath, FileMode.Open);
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;
}
可能在反序列化之前将所有文件读取到内存中,或者使用其他序列化技术?请查看此项。尝试先将文件一次读取到内存流中,然后使用内存流反序列化。尝试
反序列化。据说它可以提高速度。在Universe类中实现ISerializable数据有多复杂?如果它是一个对象树(而不是一个完整的图形),那么您可能会从尝试中得到一些有趣的结果。它通常非常容易适应现有类,并且通常更小、更快、更不脆弱(您可以在不破坏数据的情况下更改对象模型)
披露:我是作者,所以可能有偏见-但这真的不可怕。。。不过,我很乐意借点时间帮你试试
*=在合理范围内如果这让事情变得更好而不是更糟,那么序列化格式就糟透了。为什么I/O绑定的任务后面跟着CPU绑定的任务,而您可以同时执行这两个任务,交错执行?反序列化460138毫秒,反序列化459967毫秒。。反序列化实际上更快!我将带有unsafederialize的标题设置为null,这可能是原因吗?