2010-03-11 18 views
5

मैं सुन रहा हूं कि ऐप शुरू होने पर एक कनेक्शन खोलना बेहतर होगा और ऐप बंद होने पर इसे बंद कर देगा।विंडोज मोबाइल कॉम्पैक्ट फ्रेमवर्क SqlCeConnection

एकाधिक कनेक्शन होने के साथ किस प्रकार की समस्या हो सकती है?

कोई लेख है कि यह एक कनेक्शन के लिए सबसे अच्छा प्रथा है?

एसक्यूएल सीई के साथ आपका अनुभव क्या है?

उत्तर

2

हमारे एसक्यूएल सीई 3.5/कॉम्पैक्ट फ्रेमवर्क 3.5 एप्लिकेशन में, हम स्टार्टअप पर एक कनेक्शन खोलते हैं और एप्लिकेशन बंद होने तक इसे खोलते रहते हैं। डेटाबेस में लगभग हर उपयोगकर्ता-इंटरैक्शन पर डेटाबेस की आवश्यकता होती है और कनेक्शन को खोलने से मांग को खोलने और बंद करने से तेज़ होता है।

सभी डेटा अपडेट लेनदेन में किए जाते हैं। हम CommitCommitMode.Immediate विकल्प का उपयोग कर लेनदेन। यह सुनिश्चित करता है कि डेटा परिवर्तन तुरंत फ़ाइल में फंस गए हैं, डेटा हानि की संभावना को कम करना।

2

यह वास्तव में निर्भर करता है। प्रदर्शन के लिए, एसक्यूएल सीई सबसे अच्छा काम करता है अगर डेटाबेस के साथ हमेशा लाइव कनेक्शन होता है, क्योंकि इंजन को हर बार कनेक्ट होने पर हर चीज का निर्माण नहीं करना पड़ता है।

हालांकि, एक कनेक्शन होने के कारण, फ़ाइल में डेटा के आलसी फ्लशियन की ओर जाता है, और एक विनाशकारी विफलता की स्थिति में डेटा हानि या भ्रष्टाचार की उच्च संभावना होती है।

मैं ऐप स्टार्टअप पर डेटाबेस के लिए "डमी" कनेक्शन खोलता हूं और वह कनेक्शन हमेशा खुला रहता है लेकिन शायद ही कभी या कभी भी इसका उपयोग नहीं किया जाता है। यदि आप करेंगे तो यह इंजन "primed" रखता है। वास्तविक डेटा एक्सेस के लिए, मैं एक अलग कनेक्शन का उपयोग करता हूं और मैं किस गतिविधि को कर रहा हूं, इस आधार पर राज्य का प्रबंधन करता हूं, आम तौर पर इसे कई प्रश्नों (एक छद्म लेनदेन यदि आप करेंगे) में खुलते हैं, लेकिन इसे अनिश्चित काल तक नहीं छोड़ते हैं।

+0

आप आलसी फ्लशिंग व्यवहार को दो तरीकों से बदल सकते हैं। जब आप 'SqlCeTransaction' पर 'Commit' को कॉल करते हैं, तो आप लेनदेन को तुरंत फ़्लश करने के लिए' CommitMode.Imedimediate 'कर सकते हैं (http://msdn.microsoft.com/en-US/library/esdw1h9d.aspx)। कनेक्शन स्ट्रिंग पर एक 'फ्लश अंतराल' विकल्प भी है (http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.connectionstring.aspx)। –

+0

"primed" से आपका क्या मतलब है ?? – pdiddy

+1

मैं इस पर किसी भी सार्वजनिक दस्तावेज़ की तलाश में था, लेकिन मुझे लगता है कि एसक्यूएल सीई टीम पर एक देव से एक निजी ईमेल है। असल में डेटाबेस से पहला कनेक्शन कुछ वस्तुओं को आंतरिक रूप से प्रारंभ करता है और हर दूसरे कनेक्शन का उपयोग करता है। एक कनेक्शन बनाना और धारण करना उन सभी ऑब्जेक्ट्स को बाद के कनेक्शन (जैसे प्रदर्शन में सुधार) द्वारा उपयोग के लिए बनाता है। – ctacke