2011-12-25 34 views
9

मैं serializing कर रहा हूँ, एक MultiDictionary<String,Object>जेएसओएन को क्रमबद्ध करते समय आउटऑफमेमरी अपवाद प्राप्त करना?

http://powercollections.codeplex.com/ to json .

यह साथ तत्वों गहरा नेस्ट किया जा रहा, यानी 618 तत्व है। एक ऑब्जेक्ट में कई ऑब्जेक्ट्स हो सकते हैं जैसे ऑब्जेक्ट्स। मैं JSON.Net

String json = JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented); 

का उपयोग कर रहा हूं मुझे क्या याद आ रहा है?

अधिक जानकारी: - यह तब तक ठीक काम कर रहा था जब तक मैं गतिशीलता का उपयोग नहीं कर रहा था, मुझे उसी नाम के एकाधिक गुणों को अनुमति देने के लिए मल्टी डिक्शनरी पर स्विच करना पड़ा। यह ज्यादातर मामलों के लिए काम करता है, केवल तभी जब वस्तुओं की संख्या बड़ी होती है, तो यह टूट जाती है।

अद्यतन: -

मैं मेमोरी की खपत पर भी नियंत्रण प्राप्त लेकिन कुछ तत्वों कि प्रत्येक तत्व को रिकर्सिवली जोड़ा हो रहे थे पर नीचे काटने कर पाए हैं।

उत्तर

12

ऐसा प्रतीत होता है कि आप Ciruclar Reference में चल रहे हैं जो OutOfMemoryException का कारण बन रहा है या आपकी वस्तुएं आपकी स्मृति के लिए बहुत बड़ी हैं। इसे जांचने के लिए NDepend का उपयोग करें।

आपको उपयोगी getting the total size of your objects मिल सकता है।

+0

परिपत्र संदर्भ की जांच करने का कोई तरीका है? –

+0

NDepend, मेरे संपादित उत्तर –

+1

@ashutoshraina http://www.ndepend.com/Features.aspx#DependencyCycle सभी को –

2

धारावाहिक होने वाली वस्तुओं की सटीक संरचना को जानने के बिना बताना मुश्किल है, लेकिन यह संभव है कि, क्योंकि ऑब्जेक्ट ग्राफ इतना बड़ा है, वहां कहीं भी परिपत्र संदर्भ हो सकते हैं (एक वस्तु जो किसी ऑब्जेक्ट को इंगित करती है जो बदले में पहली वस्तु के लिए), serialization का अनंत लूप बनाते हैं।

संपादित करें:

आप NDepend की तरह, एक उपकरण का उपयोग कर सकते हैं, पता लगाने के लिए जहां परिपत्र संदर्भ हैं। परीक्षण संस्करण को आज़माएं।

4

मान लिया जाये कि आप परिपत्र संदर्भ की जरूरत नहीं है - अगर आप अगर आप कोशिश कर रहे हैं स्मृति में पूरी बात Newtonsoft में एक StreamWriter (JsonWriter या TextWriter) का उपयोग v4.0.30319

using (TextWriter writer = File.CreateText("LocalJSONFile.JSON")) 
{ 
    var serializer = new JsonSerializer(); 
    serializer.Serialize(writer, myObject); 
} 

उपयोग JsonWriter संग्रहीत नहीं कर सकता स्ट्रिंग

StringBuilder sb = new StringBuilder(); 
StringWriter sw = new StringWriter(sb); 

using(JsonWriter writer = new JsonTextWriter(sw)) 
{ 
    var serializer = new JsonSerializer(); 
    serializer.Serialize(writer, myObject); 
} 
+0

द्वारा पसंदीदा टूल की तरह लगता है। इतने सारे सिरदर्द के बाद, अंततः टेक्स्टवाइटर के बारे में आपके पहले समाधान काम करते हैं। मेरी इच्छा है, अगर मैं आपके लिए 10 बार वोट दे सकता हूं। – Dilip0165

संबंधित मुद्दे