Как увеличить скорость десериализации? - PullRequest
6 голосов
/ 25 октября 2009

Сериализация / десериализация с помощью BinaryFormatter, в результате размер сериализованного файла составляет ~ 80 МБ. Десериализация занимает несколько минут. Как я могу улучшить это? Вот код десериализации:

    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 ]

2 голосов
/ 25 октября 2009

Попробуйте UnsafeDeserialize. Говорят, для улучшения скорости.

0 голосов
/ 25 октября 2009

Насколько сложны данные? Если это объект дерево (а не полный граф ), то вы можете получить некоторые интересные результаты, попробовав protobuf-net . обычно довольно легко вписывается в существующие классы, и, как правило, он намного меньше, быстрее и менее хрупок (объектную модель можно изменить, не удаляя данные).

Раскрытие информации: я автор, так что, возможно, предвзято - но это действительно не страшно ... Я с радостью предоставлю немного * времени, чтобы помочь вам попробовать это.

* = в пределах разумного

0 голосов
/ 25 октября 2009

Реализация ISerializable в классе вселенной

0 голосов
/ 25 октября 2009

Попробуйте сначала прочитать файл в поток памяти, а затем десериализовать, используя поток памяти.

0 голосов
/ 25 октября 2009

Пожалуйста, посмотрите на эту тему .

...