сериализация данных для последующего повторного использования - PullRequest
7 голосов
/ 13 января 2010

У меня есть заполненная DataTable, которую я хочу сериализовать в файл для дальнейшего использования. Я просматривал варианты, связанные с этим, и задавался вопросом, может ли кто-нибудь указать мне правильное направление.

Я буду создавать два метода: один для записи данных в файл, а другой для создания нового, используя файл в качестве входных данных. Имеет ли смысл использовать для этого методы WriteXML () и Load (), и если да, то на каких флагах следует сосредоточиться? Спасибо за руководство.

Я использую .Net 2.0, если это помогает.

Ответы [ 5 ]

13 голосов
/ 13 января 2010

Я думаю, что Silveira комментарий означает использование двоичной сериализации. И правильно, что он очень быстро сравнивается с XML, сериализация которого очень медленная, по сравнению с двоичным файлом, особенно для большого объема данных. Кроме того, это занимает намного меньше места на диске по сравнению с XML.

    public static void Serialize(DataSet ds, Stream stream) {
        BinaryFormatter serializer = new BinaryFormatter();
        serializer.Serialize(stream, ds);
    }

    public static DataSet Deserialize(Stream stream) {
        BinaryFormatter serializer = new BinaryFormatter();
        return (DataSet)serializer.Deserialize(stream);
    } 
10 голосов
/ 13 января 2010

Я бы пошел для чтения / записи XML-методов. Мы используем это довольно широко. Это быстро, легко, встроено в фреймворк.

7 голосов
/ 26 апреля 2012

ВАЖНАЯ ТОЧКА: Если вы попытаетесь сериализовать объект DataTable или DataSet, используя двоичный форматер, вы все равно получите двоичный файл, но он довольно большой, потому что он заполнен тонной XML-данных.К сожалению, данные XML в двоичных файлах создают огромные файлы, в которых отсутствуют преимущества переносимости и удобочитаемости, которые обеспечивает XML.Впоследствии десериализация таких файлов может занять несколько секунд и в итоге займет гораздо больше памяти, чем действительно необходимо.В результате, если вы выберете двоичную сериализацию объектов ADO.NET, поскольку вам нужно получить более компактный вывод, у вас не получится .Бинарная сериализация по-прежнему является наиболее экономичным способом, но с объектами ADO.NET она оказывается не такой эффективной, как должна.

Для полной ссылки прочитайте следующую статью: -http://msdn.microsoft.com/en-us/magazine/cc188907.aspx

1 голос
/ 13 января 2010

Вы можете использовать базовый метод сериализации вашей базы данных в файлы CSV с заголовками. Некоторые системы управления базами данных поддерживают простую загрузку данных из таких файлов. И в случае, если ваши dbms этого не сделают, не составит труда написать код, который сделает это за вас. Это отвечает на ваш вопрос?

На мой взгляд, недостатком xml является то, что он содержит, возможно, больше метаданных, чем фактических данных. В случае csv-файлов метаданные не повторяются.

0 голосов
/ 13 января 2010

Является ли объект данных в памяти? Если это так, вы можете просто использовать методы сериализации и десериализации. Они относительно быстрые, и вы можете сохранить результат в любом месте.

...