Самый эффективный способ записи двоичных данных в файл в C # - PullRequest
4 голосов
/ 14 ноября 2009

Я пытаюсь оптимизировать класс, который сериализует объекты в двоичном формате и записывает их в файл. В настоящее время я использую FileStream (в режиме синхронизации из-за размера моих объектов) и BinaryWriter. Вот как выглядит мой класс:

public class MyClass
{
    private readonly BinaryWriter m_binaryWriter;
    private readonly Stream m_stream;

    public MyClass()
    {
        // Leave FileStream in synchronous mode for performance issue (faster in sync mode)
        FileStream fileStream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite, maxSize, false);
        m_stream = fileStream;

        m_binaryWriter = new BinaryWriter(m_stream);
    }

    public void SerializeObject(IMySerializableObject serializableObject)
    {
        serializableObject.Serialize(m_binaryWriter);
        m_stream.Flush();
    }
}

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

1 Ответ

5 голосов
/ 14 ноября 2009

Да - вы можете использовать другой формат сериализации. Встроенный формат сериализации богат, но имеет и недостатки - он довольно многословен по сравнению с некоторыми другими пользовательскими форматами.

Формат, с которым я наиболее знаком, это Протокол буфера , который является эффективным и переносимым двоичным форматом от Google. Однако для этого требуется, чтобы вы проектировали типы, которые вы хотите сериализовать, другим способом. Всегда есть плюсы и минусы:)

Существуют и другие двоичные форматы сериализации, такие как Thrift .

Вы можете хотите придерживаться встроенной сериализации, но стоит знать, что доступны другие варианты.

Однако, прежде чем заходить слишком далеко, вы должны определить, что вас волнует и сколько вам на самом деле нужно беспокоиться о производительности. Вы можете потратить много времени на изучение вариантов, когда то, что у вас есть, может быть хорошо, как есть:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...