Чтение большого файла JSON в переменную в C#.net

Я пытаюсь проанализировать файлы JSON и вставить их в базу данных SQL. Мой синтаксический анализатор работал отлично, пока файлы небольшие (менее 5 МБ).

Я получаю "Исключение из нехватки памяти" при попытке чтения больших (> 5 МБ) файлов.

if (System.IO.Directory.Exists(jsonFilePath))
                {
                    string[] files = System.IO.Directory.GetFiles(jsonFilePath);
                    foreach (string s in files)
                    {
                        var jsonString = File.ReadAllText(s);
                        fileName = System.IO.Path.GetFileName(s);
                        ParseJSON(jsonString, fileName);

                    }
                }

Я попробовал подход JSONReader, но безуспешно получал весь JSON в строку или переменную. Пожалуйста, сообщите.

2 ответа

Решение

Используйте 64 бит, проверьте ответ RredCat на похожий вопрос:

Newtonsoft.Json - исключение нехватки памяти при десериализации большого объекта

Советы по производительности NewtonSoft Jason

Прочитайте статью Дэвида Кокса о токенизации:

"Основной подход заключается в использовании объекта JsonTextReader, который является частью библиотеки Json.NET. JsonTextReader считывает файл JSON по одному токену за раз. Таким образом, он позволяет избежать затрат на чтение всего файла в строку. токены считываются из файла, объекты создаются и помещаются в стек и выгружаются из него. Когда достигается конец файла, вершина стека содержит один объект - вершину очень большого дерева объектов, соответствующих объектам в исходном файле JSON"

Парсинг больших записей с Json.NET

Файл json слишком велик, чтобы поместиться в памяти в любой форме.

Вы должны использовать программу чтения JSON, которая принимает имя файла или поток в качестве входных данных. Из вашего вопроса не ясно, какой JSON Reader вы используете. Из какой библиотеки?

Если ваше устройство чтения JSON создает все дерево JSON, вам все равно не хватит памяти. Когда вы читаете файл JSON, либо выберите данные, которые вы ищете, либо запишите структуры данных в другой формат на диске, который можно легко запросить, например, в базу данных sqlite.

Другие вопросы по тегам