सबसे पहले, मैं System.Xml.XmlDocument को अयोग्य कर दूंगा क्योंकि it is a DOM जिसके लिए इसे जोड़ने से पहले स्मृति में पूरे पेड़ को पार्सिंग और निर्माण करने की आवश्यकता होती है। इसका मतलब है कि आपका 10 एमबी टेक्स्ट मेमोरी में 10 एमबी से अधिक होगा। इसका मतलब है कि यह "स्मृति गहन" और "समय लेने वाला" है।
दूसरा, मैं System.Xml.XmlReader को अयोग्य कर दूंगा क्योंकि यह requires parsing the entire file इससे पहले कि आप इसे जोड़ सकें, इससे पहले कि आप इसे प्राप्त कर सकें। आपको XmlReader को XmlWriter में कॉपी करना होगा क्योंकि आप इसे संशोधित नहीं कर सकते हैं। इससे पहले कि आप इसे जोड़ सकें, इससे पहले आपके एक्सएमएल को मेमोरी में डुप्लिकेट करना होगा।
XmlDocument और XmlReader स्ट्रिंग परिवर्तन किया जाएगा करने के लिए तेजी से समाधान (जो अपनी ही स्मृति मुद्दे हैं):
string xml = @"<Errors><error />...<error /></Errors>";
int idx = xml.LastIndexOf("</Errors>");
xml = xml.Substring(0, idx) + "<error>new error</error></Errors>";
, समाप्ति टैग बंद काट नई त्रुटि में जोड़ने के लिए, और अंत टैग वापस जोड़ें।
मुझे लगता है कि आप इसके साथ पागल हो सकते हैं और 9 अक्षरों से अपनी फ़ाइल को छोटा कर सकते हैं और इसमें शामिल हो सकते हैं। फ़ाइल में पढ़ना नहीं होगा और ओएस को पृष्ठ लोडिंग को अनुकूलित करने देगा (केवल अंतिम ब्लॉक या कुछ में लोड करना होगा)।
System.IO.FileStream fs = System.IO.File.Open("log.xml", System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);
fs.Seek(-("</Errors>".Length), System.IO.SeekOrigin.End);
fs.Write("<error>new error</error></Errors>");
fs.Close();
यही एक समस्या मारा है, जब आपके फ़ाइल रिक्त है या होता है केवल "< त्रुटियाँ > </त्रुटियाँ >", जो दोनों के आसानी से लंबाई की जाँच के द्वारा नियंत्रित किया जा सकता है।
स्रोत
2009-05-11 17:08:02
आप इसे कैसे लिख रहे हैं? डीओएम का उपयोग करना? SAX? प्रत्यक्ष लिखता है? :- पी मैं व्यक्तिगत रूप से डोम दृष्टिकोण पसंद करता हूं; आप केवल त्रुटियों नोड तक पहुंचें और appendChild() को कॉल करें। –
कृपया इस स्थिति के लिए "सबसे तेज़" परिभाषित करें; क्या आपका मतलब है "निष्पादित करने के लिए सबसे तेज़" या "विकसित करने के लिए सबसे तेज़"? –
"निष्पादित करने के लिए सबसे तेज़" –