एक ऐसे मामले को देखते हुए जहां मेरे पास एक ऑब्जेक्ट है जो एक या एक से अधिक सच्चे/झूठे राज्यों में हो सकता है, मैं हमेशा थोड़ा अस्पष्ट रहा हूं कि प्रोग्रामर अक्सर कई बुलियन मूल्यों का उपयोग करने के बजाय झंडे + बिटमास्क का उपयोग क्यों करते हैं।बुलियन की श्रृंखला के बजाय झंडे + बिटमास्क का उपयोग क्यों करें?
यह सभी .NET ढांचे पर है। सुनिश्चित नहीं हैं कि अगर यह सबसे अच्छा उदाहरण है, लेकिन नेट ढांचा निम्नलिखित है:
public enum AnchorStyles
{
None = 0,
Top = 1,
Bottom = 2,
Left = 4,
Right = 8
}
तो एक लंगर शैली को देखते हुए, हम bitmasks का उपयोग जो राज्यों के चुने गए हैं यह पता लगाने कर सकते हैं। हालांकि, ऐसा लगता है कि आप एक ही चीज को एंकर स्टाइल क्लास/स्ट्रक्चर के साथ पूरा कर सकते हैं जिसमें प्रत्येक संभव मूल्य के लिए परिभाषित बूल गुण होते हैं, या व्यक्तिगत enum मानों की एक सरणी होती है।
बेशक मेरे प्रश्न का मुख्य कारण यह है कि मैं सोच रहा हूं कि मुझे अपने कोड के साथ एक समान अभ्यास का पालन करना चाहिए।
तो, इस दृष्टिकोण का उपयोग क्यों करें?
- कम स्मृति खपत? (यह प्रतीत होता है जैसे यह एक सरणी/बूल की संरचना से कम उपभोग करेगा)
- संरचना या सरणी से बेहतर स्टैक/ढेर प्रदर्शन?
- तेजी से तुलना संचालन? तेज मूल्य वृद्धि/हटाने?
- डेवलपर के लिए अधिक सुविधाजनक कौन लिखा है?
ऐसा नहीं है कि मुझे एक मजबूत तर्क मिलता है, लेकिन यह ** ** कम स्मृति का उपभोग करता है। यह एक int (4 बाइट्स) का उपयोग करता है जबकि प्रत्येक बूल एक बाइट का उपयोग करता है। तो, 4 बूल एक int के समान उपयोग करता है। 32 बूल 32 बाइट्स का उपयोग करते हैं, जबकि वे सभी बूल एक ही enum में हो सकते हैं। और यदि आप अनुशंसित पथ पर नहीं जाते हैं, तो आप 8 बाइट लंबा बना सकते हैं (आकार (लंबा))। –
इसे स्पष्ट करने के लिए धन्यवाद। इसने मुझे इस पोस्ट का नेतृत्व किया: http://stackoverflow.com/questions/294905/why-in-net-system-boolean-takes-4-byte –
तो प्रतिक्रियाओं से यह स्पष्ट है कि enum झंडे structs की तुलना में अधिक हल्के हैं/स्मृति के मामले में बूल के सरणी। हालांकि, ऐसा लगता है कि कुछ .NET फ्रेमवर्क कक्षाएं हैं जो कार्य के लिए उपयुक्त होंगी, जैसे कि बिटवॉक्टर 32 या बिटअरे। भंडारण के लिए बिटविक्टर 32 (एक यूंट द्वारा समर्थित) का उपयोग करने वाली संरचना के बारे में क्या है और विशिष्ट इंडेक्स पर बिट्स (बूल के रूप में) प्राप्त करने वाले गुण प्रदान करता है? विंडोज प्रपत्र ऐसा करने लगता है। डेवलपर के लिए अधिक कोड, लेकिन ऐसा लगता है कि यह अच्छा प्रदर्शन करेगा और encapsulation डाउनस्ट्रीम एपीआई उपभोक्ताओं के उपयोग के लिए आसान बना देगा। हम्म? –