2016-07-25 7 views
6

मैं JSON फ़ाइलें पार्स और SQL DB.My पार्सर में डालने के लिए कोशिश कर रहा हूँ में चर में बड़े JSON फ़ाइल पढ़ना रूप में लंबे समय के रूप में फाइल छोटे (5 एमबी से भी कम) कर रहे हैं बिल्कुल ठीक काम किया।सी # .net

मैं हो रही है "स्मृति अपवाद से बाहर" जब बड़े (> 5MB) फ़ाइलों को पढ़ने की कोशिश कर रहा।

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

क्या" बड़ी "में वस्तुओं के लिए इसी वस्तुओं की एक बहुत बड़ा पेड़ के शीर्ष ? 5.1meg? 5555555555 मेगाबाइट्स? –

+0

* मैंने JSONReader दृष्टिकोण की कोशिश की, लेकिन पूरे JSON को स्ट्रिंग या चर में प्राप्त करने पर कोई भाग्य नहीं है। * यदि "JSONReader" से आपका मतलब है ['JsonTextReader'] (http: //www.newtonsoft। com/json/help/html/T_Newtonsoft_Json_JsonTextReader.htm) Json.NET से, क्या आप जो भी कोशिश कर रहे हैं उसे साझा कर सकते हैं लेकिन काम नहीं किया? – dbc

+0

foreach (फ़ाइलों में स्ट्रिंग एस) {fileName = System.IO.Path.GetFileName (ओं); का उपयोग कर (वेब ​​क्लाइंट क्लाइंट = नया वेब क्लाइंट()) {उपयोग (Strea mReader sr = new StreamReader (client.OpenRead (jsonFilePath + fileName))) {उपयोग (JsonReader रीडर = नया जेसनटेक्स्ट रीडर (एसआर)) {var jsonString = reader.Value.ToString(); ParseJSON (jsonString, fileName) } } } – user1046415

उत्तर

2

उपयोग 64 बिट, एक समान प्रश्न पर RredCat के जवाब की जांच:

"बुनियादी दृष्टिकोण के लिए है:

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

NewtonSoft Jason Performance Tips

tokenizing के बारे में डेविड कॉक्स द्वारा लेख पढ़ें JsonTextReader ऑब्जेक्ट का उपयोग करें, जो Json.NET लाइब्रेरी का हिस्सा है। एक JsonTextReader एक JSON फ़ाइल को एक समय में एक टोकन पढ़ता है। इसलिए, ई को पढ़ने के ओवरहेड से बचा जाता है। एक स्ट्रिंग में ntire फ़ाइल। चूंकि टोकन फ़ाइल से पढ़े जाते हैं, ऑब्जेक्ट्स बनाए जाते हैं और स्टैक के ऊपर और बंद धकेलते हैं। जब फ़ाइल के अंत तक पहुँच जाता है, ढेर के शीर्ष एक वस्तु शामिल हैं - मूल JSON फ़ाइल "

Parsing Big Records with Json.NET

-1

json फ़ाइल स्मृति में फिट करने के लिए, किसी भी रूप में बहुत बड़ी है।

आप एक JSON पाठक है कि एक फ़ाइल नाम या इनपुट के रूप में धारा स्वीकार करता है का उपयोग करना चाहिए। यह आपके प्रश्न से स्पष्ट नहीं है कि आप जिस JSON रीडर का उपयोग कर रहे हैं। किस पुस्तकालय से?

आपके JSON पाठक पूरे JSON पेड़ बनाता है, तो आप अभी भी स्मृति से बाहर चला जाएगा। जैसा कि आप JSON फ़ाइल पढ़ते हैं, या तो चेरी उस डेटा को चुनें जिसे आप ढूंढ रहे हैं, या किसी अन्य ऑन-डिस्क प्रारूप में डेटा संरचनाएं लिखें जिन्हें आसानी से पूछताछ की जा सकती है, उदाहरण के लिए, एक SQL डेटाबेस।

+0

मुझे डेटासेट बनाने के द्वारा पूरी फ़ाइल को पढ़ना होगा और एसक्यूएल डीबी में स्टोर करना होगा। – user1046415

+0

फिर एक JSON रीडर का उपयोग करें जो इनपुट के रूप में फ़ाइल नाम या स्ट्रीम स्वीकार करता है। –

+0

मेरी Json फ़ाइलें 5 एमबी से बड़े होते हैं .. – user1046415