2010-11-07 8 views
5

मेरे पास एक ऐसा एप्लिकेशन है जो SQLite का उपयोग करता है, जो बेहद हल्का वजन और त्वरित है। मेरे पास कुछ वरीयताएं हैं जिन्हें स्टार्टअप पर लोड करने की आवश्यकता नहीं है, लेकिन उपयोगकर्ता कहां जाता है इसके आधार पर विभिन्न समय पर उपयोग करने की आवश्यकता हो सकती है। ऐसा कहा जा रहा है, मैं यह तय नहीं कर सकता कि इस जानकारी को कहां स्टोर करना है।सी # आवेदन - डेटाबेस या कॉन्फ़िगरेशन फ़ाइल में वरीयताओं का भंडारण?

Q1: मैं सिर्फ आगे जाना है और डेटाबेस में संग्रहीत करना चाहिए? क्या मुझे इसे कॉन्फ़िगरेशन फ़ाइल में स्टोर करना चाहिए?

Q2: मैं लोड करना चाहिए और स्टार्टअप पर वरीयताओं को और भले ही वे जरूरी तुरंत इस्तेमाल नहीं किया जा रहा है अन्य डाटा स्टोर? या जब मुझे उनकी आवश्यकता हो तो क्या मुझे डेटाबेस से पूछताछ करनी चाहिए?

उदाहरण: मेरा आवेदन कंपनी है कि सॉफ्टवेयर का उपयोग कर रहा है के लिए कंपनी की जानकारी स्टोर कर सकते हैं। कंपनी का नाम, कंपनी फोन इत्यादि। इस जानकारी का उपयोग करने का एकमात्र समय यह है कि जब सॉफ़्टवेयर एक पत्र को प्रिंट करता है, या उपयोगकर्ता प्रोग्राम में अपनी कंपनी की जानकारी संपादित करने के लिए जाता है।

संपादित करें: मैंने महसूस किया है कि इस उपयोगकर्ता सेटिंग्स बनाम आवेदन सेटिंग्स के लिए नीचे आता है। मेरे प्रोग्राम में सॉफ़्टवेयर की प्रति प्रति एकाधिक उपयोगकर्ता नहीं हैं। ऐसा कहा जा रहा है, मुझे लगता है कि ये एप्लिकेशन सेटिंग्स होगी।

+0

लोडिंग पहली बार आवश्यकता होने पर लोडिंग बनाम लोडिंग एक व्यक्तिगत वरीयता है। लोड होने पर लोड होने पर तेज़ प्रारंभ समय की अनुमति मिलती है। सिंगलटन लुकअप जैसे (जहां आप इसे पहली एक्सेस पर सिंगलटन में लोड करते हैं) नगण्य प्रभाव डालते हैं, लेकिन इसका एक निश्चित यूआई प्रभाव हो सकता है। इस बात पर विचार करें कि फ़ोटोशॉप कैसे लोड होता है (जहां यह आपको यूआई देने से पहले सबकुछ लोड करता है) बनाम विराम बनाम जब आप चीजों को लोड करते हैं और उस परेशान प्रतीक्षा-कृपया स्क्रीन प्राप्त करते हैं तो आपको कुछ एप्लिकेशन मिलते हैं। – jcolebrand

+0

@drachenstem और आप पृष्ठभूमि में चीजों को भी लोड कर सकते हैं और यदि उपयोगकर्ता लोड नहीं होता है तो उपयोगकर्ता लोड होने की प्रतीक्षा कर सकता है। विजुअल स्टूडियो की तरह। कभी-कभी प्रलेखन कैश नहीं बनाया जाता है, लेकिन अगर इसकी आवश्यकता हो तो –

+0

बहुत सच है, लेकिन अधिकांश भाग के लिए, जो डेटा मैं लोड कर रहा हूं वह आकार में बहुत छोटा है, उपयोगकर्ता को भी ध्यान नहीं देना चाहिए। – OogaBooga

उत्तर

3

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

http://msdn.microsoft.com/en-us/library/aa730869.aspx

+0

वास्तव में बहुत सारे नहीं। इस बारे में कभी नहीं सुना ... मैं इसे पढ़ूंगा। – OogaBooga

+0

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

+0

मुझे एहसास हुआ है कि यह एप्लिकेशन सेटिंग्स बनाम उपयोगकर्ता सेटिंग्स पर आता है। मेरे प्रोग्राम में सॉफ़्टवेयर की प्रति प्रति एकाधिक उपयोगकर्ता नहीं हैं। ऐसा कहा जा रहा है, मुझे लगता है कि ये एप्लिकेशन सेटिंग्स होगी। उस स्थिति में, मुझे लगता है कि जेटीए का जवाब मेरी समस्या के लिए सबसे अच्छा होगा। अगर किसी के पास कोई कारण नहीं है तो ऐसा क्यों नहीं होगा, कृपया मुझे बताएं! – OogaBooga

1

भंडारण विन्यास डेटा हल्के वजन वाली सेटिंग शायद ही कभी बदलने के लिए अच्छा है। आम तौर पर आप यह उन सेटिंग्स के लिए करेंगे जो विकास और उत्पादन के बीच अलग हैं और आपके एप्लिकेशन को चलाने और चलाने के लिए उपयोग किए जाते हैं।

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

3

आप क्या करना चाहते हो सकता है एक वर्ग है कि सेटिंग समाहित बारे में है और फिर उन्हें Hashtable में पढ़ता है।

आप एक बुनियादी GetSetting विधि है कि एक सेटिंग एक नाम के आधार पर लग रहा है हो सकता था। यदि सेटिंग हैशटेबल में स्थित है, तो मान वापस करें, अन्यथा सेटिंग ढूंढने के लिए डीबी पर जाएं और फिर इसे हैशटेबल में संग्रहीत करें। फिर आप अपनी इच्छित प्रत्येक सेटिंग के लिए अलग-अलग गुण लिख सकते हैं, प्रत्येक गेटसेटिंग/सेटसेटिंग विधियों को कॉल कर रहा है।

यह आपको आसानी से डीबी में सेटिंग रखने की अनुमति देता है, और लगातार पढ़ने डीबी से बचने के लिए पढ़ता है संचित करता है।

public class Settings { 
    private object SyncRoot = new object(); 
    private System.Collections.Hashtable _cache = new System.Collections.Hashtable(); 

    public T GetSetting<T>(string xPath, T defaultValue) 
    { 
     lock (SyncRoot) 
     { 
      if (!_cache.ContainsKey(xPath)) 
      { 
       T val = GetSettingFromDB<T>(xPath, defaultValue); 
       _cache[xPath] = val; 
       return val; 
      } 
      return (T)_cache[xPath]; 
     } 
    } 

    public T GetSettingFromDB<T>(string xPath, T defaultValue) 
    { 
     // Read from DB 
    } 

    public void SaveSetting<T>(string xPath, T value) 
    { 
     lock (SyncRoot) 
     { 
      if (_cache.ContainsKey(xPath)) 
       _cache[xPath] = value; 
     } 

     SaveSettingToDB<T>(xPath, value); 
    } 

    public T SaveSettingToDB<T>(string xPath, T defaultValue) 
    { 
     // Read from DB 
    } 
} 

तो बस इस तरह के गुण के एक समूह के साथ एक वर्ग बनाने के लिए:

public static bool BooleanFeature 
    { 
     get { return Settings.GetSetting<bool>("BooleanFeature", true); } 
     set { Settings.SaveSetting<bool>("BooleanFeature", value); } 
    } 

अब आप अपने कोड में यह कर सकते हैं:

if (Setting.BooleanFeature) { 
    // Run certain code 
else { 
    // Run other code 
} 
+0

मैं गहराई से स्पष्टीकरण और कोड उदाहरणों में आपकी सराहना करता हूं, लेकिन जैसा कि मेरी टिप्पणी जेटीए की पोस्ट के नीचे बताती है, मुझे लगता है कि मैं अपने समाधान का उपयोग करने के लिए सबसे उपयुक्त होगा क्योंकि मेरी सेटिंग्स एप्लिकेशन सेटिंग्स होगी। – OogaBooga

0

JTAs के अलावा का जवाब मैं करूंगा यह जोड़ना पसंद है कि मैंने 3 विधियों का उपयोग किया है और उनमें से सभी के ऊपर और नीचे के पक्ष हैं।

  1. उन में भंडारण में निर्मित एक वास्तव में चल उपयोगकर्ता के लिए उन्हें बंद कर देता है। तो उदाहरण के लिए यदि एकाधिक उपयोगकर्ता आपके ऐप का उपयोग करते हैं, तो प्रत्येक उपयोगकर्ता को के लिए स्वतंत्र सेटिंग्स होगी। यदि आप यही चाहते हैं, इसे चुनें।
  2. डेटाबेस में उन्हें संग्रहीत करना उपयोगी है यदि आप उपयोगकर्ता के लिए बाध्य नहीं हैं बल्कि डेटाबेस पर हैं। हालांकि आप ऐप के बाहर से इन सेटिंग्स को नहीं बदल सकते हैं।

  3. मैंने एक कॉन्फ़िगर-क्लास का उपयोग किया है जो मुझे एक्सएमएल के साथ क्रमबद्ध करता है यदि मुझे को एक एक्सएमएल-एडिटर के साथ संपादित करने की आवश्यकता है। उदाहरण के लिए यदि आप सेवा चला रहे हैं तो यह बहुत उपयोगी है।