2016-07-25 4 views
6

J'essaye d'analyser les fichiers JSON et d'insérer dans le SQL DB.Mon parser fonctionne parfaitement bien tant que les fichiers sont petits (moins de 5 Mo).Lecture d'un grand fichier JSON dans une variable en C# .net

Je reçois une «exception de mémoire insuffisante» lorsque j'essaie de lire les gros fichiers (> 5 Mo). J'ai essayé l'approche JSONReader, mais pas de chance d'obtenir le JSON entier en chaîne ou variable.S'il vous plaît conseillez.

+2

ce qui est « grand » ? 5.1meg? 5555555555 mégaoctets? –

+0

* J'ai essayé l'approche JSONReader, mais pas de chance d'obtenir le JSON entier en chaîne ou variable. * Si par "JSONReader" vous voulez dire ['JsonTextReader'] (http: //www.newtonsoft. com/json/help/html/T_Newtonsoft_Json_JsonTextReader.htm) de Json.NET, pouvez-vous partager ce que vous avez essayé mais n'a pas fonctionné? – dbc

+0

foreach (string s dans les fichiers) {fileName = System.IO.Path.GetFileName (s); en utilisant (WebClient client = new WebClient()) {using (Strea mReader sr = new StreamReader (client.OpenRead (jsonFilePath + nomfichier))) {using (lecteur JsonReader = nouveau JsonTextReader (sr)) {var jsonString = lecteur.Value.ToString(); ParseJSON (jsonString, nomfichier) } } } – user1046415

Répondre

2

utilisation 64 bits, vérifiez la réponse de RredCat sur une question similaire:

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

NewtonSoft Jason Performance Tips

Lire l'article de David Cox à propos tokenizing:

"L'approche de base est de utiliser un objet JsonTextReader, qui fait partie de la bibliothèque Json.NET JsonTextReader lit un fichier JSON à la fois, ce qui évite le Fichier ntire dans une chaîne. Lorsque les jetons sont lus à partir du fichier, les objets sont créés et insérés dans une pile. Lorsque la fin du fichier est atteinte, le haut de la pile contient un objet - le sommet d'un arbre très grand des objets correspondant aux objets dans le fichier JSON d'origine "

Parsing Big Records with Json.NET

-1

Le fichier json est trop volumineux pour tenir dans la mémoire, sous quelque forme que ce soit.

Vous devez utiliser un lecteur JSON qui accepte un nom de fichier ou un flux comme entrée. Il n'est pas clair à partir de votre question quel lecteur JSON vous utilisez. De quelle bibliothèque?

Si votre lecteur JSON génère l'arborescence JSON entière, vous manquerez toujours de mémoire. Lorsque vous lisez le fichier JSON, vous pouvez soit sélectionner les données que vous recherchez, soit écrire des structures de données dans un autre format sur disque qui peut être facilement interrogé, par exemple, une base de données sqlite.

+0

Je dois lire le fichier entier et le stocker dans la base de données SQL en formant des ensembles de données. – user1046415

+0

Utilisez ensuite un lecteur JSON qui accepte un nom de fichier ou un flux comme entrée. –

+0

mes fichiers JSON sont plus grands que 5 Mo .. – user1046415