如何提高反序列化速度?

时间:2009-10-25 11:25:21

标签: c# performance serialization binaryformatter

使用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;
    }

在反序列化或使用其他一些序列化技术之前,可能会读取所有内存?

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

请查看此thread

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

* =在理性之内

答案 4 :(得分:-1)

在Universe类中实现ISerializable