2012-10-23 20 views
30

मैं अपने डेटाबेस से ऑयनेमेरेबल के रूप में ऑब्जेक्ट्स लौटने के लिए डैपर का उपयोग करता हूं। डिफ़ॉल्ट डैपर में बफर सेटिंग को सत्य पर सेट किया गया है।डैपर बफर/कैश का स्पष्टीकरण

यह कैसे काम करता है?

यदि डैपर पहली क्वेरी कैश करता है और फिर ऑब्जेक्ट को स्मृति से प्राप्त करता है।

क्या होता है यदि कोई तालिका में पंक्तियों को संपादित/हटा/जोड़ता है। इस क्वेरी के लिए फिर से डेटा को दोबारा डालना चाहिए?

उत्तर

44

बफर कैश से असंबंधित नहीं है। डैपर में किसी प्रकार का डेटा-कैश शामिल नहीं होता है (हालांकि इसमें कैश से संबंधित कैश होता है, यानी यह कमांड प्रोसेस करता है, यानी "इस कमांड स्ट्रिंग, इस प्रकार के पैरामीटर के साथ, और इस प्रकार की इकाई - इन कॉन्फ़िगर करने के लिए इन गतिशील रूप से जेनरेट किए गए तरीके हैं आदेश और वस्तुओं को populate ")।

क्या इस स्विच का वास्तव में मतलब है:

  • false: आइटम पुनरावृति जाएगा के रूप में वे/भस्म प्राप्त कर रहे हैं - मूल रूप से, एक IDataReader
    • शून्य के आसपास एक iterator ब्लॉक: आप केवल एक बार पुनरावृति कर सकते हैं (जब तक आप क्वेरी को दोबारा चलाने में प्रसन्न न हों)
    • प्लस: आप अत्यधिक क्वेरी (कई लाख पंक्तियों) को फिर से मेमोरी कर सकते हैं, बिना किसी इन-मेमोरी की आवश्यकता के बिना - क्योंकि आप केवल वास्तव में देख रहे हैं cur पर किराए पर पंक्ति
    • प्लस: आपको डेटा के अंत में पुनरावृत्ति शुरू करने की प्रतीक्षा करने की आवश्यकता नहीं है - जैसे ही कम से कम एक पंक्ति हो, आप
    • से कम होने के लिए अच्छे हैं: कनेक्शन है जब आप पुनरावृत्ति कर रहे हों, तो इसका उपयोग करने के दौरान, "कनेक्शन पर एक खुला पाठक पहले से मौजूद है" (या जो भी सही शब्द है) त्रुटियों का कारण बन सकता है यदि आप प्रति-पंक्ति के आधार पर अन्य आदेशों को आमंत्रित करने का प्रयास करते हैं (यह हो सकता है मंगल ग्रह)
    • शून्य से कम किया: क्योंकि उपभोक्ता कुछ भी वे प्रति-मद चाहते हो सकता है (यह पंक्ति प्रति मिनट लग सकते हैं, अगर वे जटिल कुछ), आदेश/पाठक अधिक समय के लिए खुला हो सकता है कर रहे हैं
  • true (डिफ़ॉल्ट): डेटा पूरी तरह से एक List<T> में सेवन किया जाता है इससे पहले कि यह इसे वापस करने के लिए आप हाथ
    • प्लस: क्या आप
    • शून्य की तरह के रूप में यह रूप में कई बार पुनरावृति कर सकते हैं: यदि क्वेरी विशाल है, लोड हो रहा है उन सभी में स्मृति (एक सूची में) महंगा/असंभव हो सकता है
    • शून्य: यदि क्वेरी बड़ी है, तो यह अंतिम अक्षांश
    • प्लस एकत्रित करने पर ध्यान देने योग्य विलंबता हो सकती है: एक बार जब आप डेटा प्राप्त कर लेते हैं, तो आदेश होता है पूर्ण - इसलिए उस और उसके बाद के परिचालनों के बीच कोई संघर्ष नहीं है
    • प्लस: जैसे ही आप डेटा प्राप्त करते हैं, आदेश पहले से ही ऐसा

अधिकांश प्रश्नों को केवल डेटा के उदार राशि (जैसे कि, कम से कम 100 रिकॉर्ड) लौटने के लिए, किसी भी संसाधन जारी किया है (ताले आदि) है, तो आप सर्वर पर न्यूनतम प्रभाव हो रही हो, हमें खुशी है कि डिफ़ॉल्ट (true) अधिकांश परिदृश्यों के लिए सबसे उपयुक्त व्यवहार प्रदान करता है। लेकिन हम विभिन्न उपयोग परिदृश्यों को पूरा करने के लिए आपके लिए विकल्प उपलब्ध कराते हैं।

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