2009-12-23 4 views
4

Есть ли хороший подход к сериализации и де-сериализации больших файлов (> 10M) в C#.Сериализация и десериализация больших файлов

Заранее спасибо.

+0

Какие файлы? К чему вы хотите десериализовать их? – SLaks

+0

Двоичные файлы? Текст? XML? Вы хотите прочитать весь файл в объектной модели? –

+1

См. Также: http://stackoverflow.com/questions/1941928/best-way-to-store-data-locally-in-net-c/1941970#1941970 – 2009-12-23 16:08:12

ответ

1

Вы можете проверить мой ответ here на этот вопрос (там есть все виды других соответствующих ответов).

Мой метод использует BinaryReader и BinaryWriter для обеспечения производительности.

Я использовал этот метод для десериализации 50 МБ файлов в недавнем проекте, и он делает это довольно быстро (менее 5 секунд) по сравнению со встроенной сериализацией или сериализацией Xml (10 минут для моего набора данных).

1

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

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

Случайные снимки в темноте здесь, ваш вопрос слишком расплывчатый.

0

Если у вас действительно есть большие файлы (скажем, более 100 МБ), лучше всего загрузить только то, что вам нужно в данный момент.

Предположим, у вас есть список из 10.000 клиентов - каждый с изображением. Нет смысла хранить этот список в памяти.

Например, вы можете загрузить все последние имена и позицию человека в файле. Таким образом, пользователь мог бы найти человека, и вы могли бы загрузить именно этого человека.

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

Вместо очень больших файлов базы данных могут принести определенные преимущества. Они могут абстрагировать большую работу, необходимую для навигации по файлу.

«Single-Line-Serialization» с использованием BinaryFormatter и т. Д., Однако, достигает своих пределов в файлах такого размера, на мой взгляд. Вы должны думать о других понятиях.

1

Вы уверены, что сериализация/десериализация - это правильный подход к такому большому количеству данных? Возможно, клиентская база данных, такая как SQLite, будет лучшим решением, где вы можете запросить ее для получения точных данных, а не просто загружать все в память?

Смежные вопросы