c# - MySqlDataReader stops reading after about 4 minutes and returns -


मेरे पास एक साधारण क्वेरी है जो 25,026 पंक्तियां देता है:

  MySqlCommand cmd = new MySqlCommand ( "लोगों से चयन आईडी", डीबी); MySqlDataReader रीडर = cmd.ExecuteReader ();  

( आईडी एक int है।) अगर मैं बस ऐसा करता हूं:

  int i = 0; जबकि (reader.Read ()) i ++;  

i 25026 के बराबर होगा। हालांकि, मुझे अपने लूप में प्रत्येक आईडी पर कुछ प्रोसेसिंग करने की आवश्यकता है; प्रत्येक चलना सैकड़ों मिलीसेकंडों में कहीं ले जाती है।

  int i = 0; MySqlCommand Updater = नया MySqlCommand ("अन्य में शामिल करें (...)", एक और कनेक्शन); updater.Prepare (); जबकि (reader.Read ()) {int id = reader.getInt32 (0); // do सामान, फिर updater.ExecuteNonQuery (); i ++; }  

हालांकि, प्रसंस्करण के बारे में 4:15 के बाद, reader.Read () बस झूठी वापसी करता है। मेरे अधिकांश परीक्षण में, i 14896 बराबर होता है, लेकिन यह कभी-कभी 11920 पर बंद हो जाता है। रिकॉर्ड की इसी संख्या के बाद DataReader छोड़ना संदेहास्पद है, और यह समय बंद हो जाता है दूसरी पंक्तियों के बाद भी अजनबी लगता है।

क्यों reader.Read () झूठी लौट रहे हैं जब निश्चित रूप से अधिक पंक्तियाँ हैं? फेंक दिया जा रहा कोई अपवाद नहीं हैं & ndash;

अपडेट: मैंने अपनी प्रतिक्रिया में बताया था कि मुझे विश्वास हो रहा था कि MySqlDataReader.Read () एक अपवाद निगल रहा है, इसलिए मैंने डाउनलोड किया ( शाखा एलपी: कनेक्टोनेट / 6.2 सी: / स्थानीय / पथ ) और मेरे समाधान के लिए परियोजना को जोड़ा। सुनिश्चित करें कि प्रोसेसिंग के 6:15 के बाद, एक अपवाद!

को कॉल एक MySqlException को एक संदेश के साथ फेंकता है की "धारा से पढ़ना विफल हो गया है।" InnerException एक SocketException है:

  {संदेश: "मौजूदा कनेक्शन को रिमोट होस्ट द्वारा जबरन बंद किया गया था", त्रुटि कोड: 10054, SocketErrorCode: ConnectionReset}  

10054 का मतलब है कि सामान्य वियोग का हाथ संभाल ( FIN , RST से रद्द कर दिया गया था > एफआईएन एसीके , एसीके ), जो मुझे बताता है कि नेटवर्क कनेक्शन पर कुछ गड़बड़ हो रहा है।

मेरी आईएनआई में, मैंने क्रैंक किया interactive_timeout और wait_timeout से 1814400 (सेकंड) तक कोई लाभ नहीं हुआ है।

तो ... 6:15 (375 सेकंड) पढ़ने के बाद मेरा संबंध क्यों टूट गया है? < / P>

(इसके अलावा, यह आधिकारिक द्विपदीय का उपयोग करने पर यह अपवाद क्यों निगल रहा है? यह दिखता है जैसा कि यह मेरे आवेदन कोड पर बुलबुला होना चाहिए।)

शायद आपके पास एक भ्रष्ट मेज है - यह आदमी की समस्या आपके समान है: - मेज की जोड़ी करें और देखें कि क्या होता है।

यदि वह काम नहीं करता है, तो इसे पढ़ें:

मेरा अनुमान है कि आप कुछ प्रकार के गतिरोध को मार रहे हैं, विशेष रूप से आप पढ़ रहे हैं और लिख रहे हैं। यह स्पष्टीकरण करेगा कि यह सरल लूप के साथ क्यों काम करता है, लेकिन जब आप अपडेट करते हैं तो काम नहीं करता। यह भी समझाता है कि प्रत्येक बार उसी पंक्ति / समय के आसपास क्यों होता है

SqlDataReader में एक अजीब बग था जो कि अपवादों को सुलझाया ()। MySqlDatareader में कुछ इसी तरह हो सकता है - आपके अंतिम के बाद। () कॉल करें, कॉल करने की कोशिश करें। NextResult () यहां तक ​​कि अगर यह एक गतिरोध नहीं है, तो यह समस्या का निदान करने में आपकी सहायता कर सकता है। इन प्रकार की परिस्थितियों में, आप "विश्वास पर विश्वास की जांच करें" की ओर झुकना चाहते हैं - हां, दस्तावेज़ीकरण कहता है कि अपवाद समय के समय में फेंक दिया जाएगा, लेकिन कभी-कभी (बहुत कम) दस्तावेज़ीकरण झूठ होता है :) यह विशेष रूप से 3 पार्टी विक्रेताओं - उदा देखें - mysql .net पुस्तकालय में आपके जैसी कई समस्याएं हैं, जैसे कि आप अतीत में हैं।

एक और विचार यह देखना होगा कि आपके डेटाबेस में क्या हो रहा है - सुनिश्चित करें कि डेटा को तुरन्त लाया जा रहा है जब तक कि आपके कोड से बाहर निकलती है।

ऐसा न मानने पर, मैं बस सभी डेटा पढ़ा, उसे कैश कर दूंगा, और फिर अपने संशोधनों को करें। संशोधनों को बैचिंग करके, कोड कम बातें करना होगा और तेजी से निष्पादित होगा।

वैकल्पिक रूप से, हर 1000 या इतनी पंक्तियों को रीडर रीसेट करें (और आप जिस पंक्ति आईडी को बना रहे हैं उसका ट्रैक रखें)

< P> आशा है कि यहां आपकी निराशा में मदद मिलेगी! :)


Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -