Чтение больших JSON-файлов

Все мы привыкли читать JSON как-то так (с использованием Json.NET):

Product deserializedProduct = JsonConvert.DeserializeObject(json);

И это отлично работает, пока размер сообщения, которое мы читаем сравнительно небольшой. Вчера мне понадобилось прочить JSON размером 1.7 Гб. Все попытки десериализации сохраненного в файле массива ожидаемо закончились OutOfMemoryException.

Без лишних разговоров, публикую рецепт:

В каждой итерации цикла в переменной obj мы будем получать следующий элемент массива.
Память такой подход не использует вообще :)

Коментарі

Pilya каже…
Хорошее решение! мудрое и своевременное! (c) Суворов, "Контроль".

но это ж только "большой массив простых объектов", и при условии, что сами по-себе CS-объекты влезут в память (ок, 1.7G памяти всегда есть).

но сама идея "поточной обработки наборов данных мне кажется очень правильной!
Unknown каже…
Ха. Я думаю, что все понимают - читать надо поток. Я сразу и искал как это сделать. Оказалось, что примеров для этого не так уж много, хотя библиотека такую возможность реализует.
Kalinets' family каже…
если там один большой элемент, то не наверное не сработает

Популярні дописи з цього блогу

OAuth-аутентификация через ВКонтакте

Українська мова