2016-07-25 6 views
6

Ich versuche, die JSON-Dateien analysieren und in die SQL DB einfügen. Mein Parser funktionierte einwandfrei, solange die Dateien klein sind (weniger als 5 MB).Große JSON-Datei in Variable in C# lesen. Net

Ich erhalte "Out of memory Ausnahme" beim Versuch, die großen (> 5MB) Dateien zu lesen.

Ich versuchte den JSONReader Ansatz, aber kein Glück auf den gesamten JSON in String oder Variable zu bekommen. Bitte beraten.

+2

, was‚großen‘ ? 5.1meg? 5555555555 Megabyte? –

+0

* Ich versuchte den JSONReader-Ansatz, aber kein Glück auf den gesamten JSON in String oder Variable. * Wenn von "JSONReader" meinen Sie ['JsonTextReader'] (http: //www.newtonsoft. com/json/help/html/T_Newtonsoft_Json_JsonTextReader.htm) von Json.NET, können Sie teilen, was Sie versucht haben, aber nicht funktioniert? – dbc

+0

foreach (Zeichenfolge s in Dateien) {fileName = System.IO.Path.GetFileName (s); mit (WebClient client = neuer WebClient()) {using (Strea mReader sr = neuer StreamReader (client.OpenRead (jsonFilePath + fileName))) {using (JsonReader reader = neuer JsonTextReader (sr)) {var jsonString = reader.Value.ToString(); ParseJSON (jsonString, Dateiname) } } } – user1046415

Antwort

2

Verwenden 64 bit, überprüfen RredCat Antwort auf eine ähnliche Frage:

Newtonsoft.Json - Out of memory exception while deserializing big object

NewtonSoft Jason Performance Tips

den Artikel von David Cox über Tokenisieren lesen:

"Der grundlegende Ansatz ist es, Verwenden Sie ein JsonTextReader-Objekt, das Teil der Json.NET-Bibliothek ist.Ein JsonTextReader liest eine JSON-Datei ein Token nach dem anderen und vermeidet so den Overhead beim Lesen des e Datei in eine Zeichenfolge einfügen. Wenn Token aus der Datei gelesen werden, werden Objekte erstellt und auf einen Stapel und von diesem weg geschoben. Wenn das Ende der Datei erreicht wird, enthält die Oberseite des Stapels ein Objekt - die Spitze eines sehr großen Baum von Objekten zu den Objekten in der ursprünglichen JSON-Datei entsprechenden "

Parsing Big Records with Json.NET

-1

Die JSON-Datei ist zu groß, um in irgendeiner Form in den Speicher zu passen.

Sie müssen einen JSON-Reader verwenden, der einen Dateinamen oder Stream als Eingabe akzeptiert. Es ist nicht klar aus Ihrer Frage, welchen JSON Reader Sie verwenden. Aus welcher Bibliothek?

Wenn Ihr JSON-Reader den gesamten JSON-Baum erstellt, haben Sie immer noch nicht genügend Arbeitsspeicher. Während Sie die JSON-Datei lesen, wählen Sie entweder die gesuchten Daten aus oder schreiben Sie Datenstrukturen in ein anderes Format auf der Festplatte, das leicht abgefragt werden kann, z. B. eine SQLite-Datenbank.

+0

Ich muss die gesamte Datei lesen und in SQL DB speichern, indem Sie Datensätze erstellen. – user1046415

+0

Verwenden Sie dann einen JSON-Reader, der einen Dateinamen oder Stream als Eingabe akzeptiert. –

+0

Meine JSON-Dateien sind größer als 5 MB .. – user1046415