वे कैसे जमा हो जाती है
दोनों string
और char[]
ढेर पर जमा हो जाती है - तो भंडारण में ही है। आंतरिक रूप से मुझे लगता है कि string
के लिए के लिए यह आपके लिए उपयोगी बनाने के लिए अतिरिक्त कोड का एक कवर है।
यदि आपके पास बहुत सारे दोहराव वाले तार हैं, तो आप उन तारों की स्मृति पदचिह्न को कम करने के लिए Interning का उपयोग कर सकते हैं।
बेहतर विकल्प
मैं स्ट्रिंग एहसान होगा - इसे तुरंत अधिक स्पष्ट क्या डेटा प्रकार है है और आप इसे उपयोग करने के लिए कैसे करना चाहते हैं। लोग तारों का उपयोग करने के लिए भी अधिक आदी हैं इसलिए रखरखाव भुगतना नहीं होगा। आपको अपने लिए किए गए सभी बॉयलरप्लेट कोड से भी बहुत फायदा होगा। माइक्रोसॉफ्ट ने यह भी सुनिश्चित करने के लिए बहुत प्रयास किए हैं कि string
प्रकार एक प्रदर्शन हॉग नहीं है।
आबंटन आकार
मैं पता नहीं कितना आवंटित किया जाता है, मेरा मानना है कि तार कि में काफी कुशल वे केवल यूनिकोड वर्ण स्टोर करने के लिए पर्याप्त आवंटन रहे हैं - के रूप में वे अडिग हैं यह यह करने के लिए सुरक्षित है । Arrays को एक नई सरणी में स्थान आवंटित किए बिना भी आकार में नहीं बदला जा सकता है, इसलिए मैं फिर से मानता हूं कि उन्हें केवल वही चीज़ मिलती है जो उन्हें चाहिए।
Overhead of a .NET array?
वैकल्पिक
आपकी जानकारी केवल 20 भाषा कोड और देखते हैं कि के आधार पर प्रदर्शन, आप क्रम में आकार कोड का प्रतिनिधित्व करने के लिए आवश्यक कम करने के लिए अपनी खुद की enum की घोषणा कर सकता है कुंजी है:
enum LanguageCode : byte
{
en = 0,
}
यह केवल 1 बाइट के रूप में दो char
के लिए 4 के लिए विरोध किया (एक सरणी में) ले जाएगा, लेकिन यह उपलब्ध नही की सीमा को सीमित करता है ई LanguageCode
byte
की सीमा के मान - जो 20 वस्तुओं के लिए काफी बड़ा है।
आप sizeof()
ऑपरेटर का उपयोग कर मूल्य प्रकारों का आकार देख सकते हैं: sizeof(LanguageCode)
। Enums हुड के नीचे अंतर्निहित प्रकार के अलावा कुछ भी नहीं हैं, वे int
पर डिफ़ॉल्ट हैं, लेकिन जैसा कि आप मेरे कोड नमूने में देख सकते हैं, आप इसे "विरासत" द्वारा एक नए प्रकार से बदल सकते हैं।
स्रोत
2012-05-28 09:58:50
क्या आपने वास्तव में स्वयं को साबित किया है कि यह अभी तक एक समस्या है? स्ट्रिंग्स का उपयोग करते समय मुझे स्मृति के बारे में चिंता करने की ज़रूरत बहुत ही कम है - खासकर ऐसे छोटे। यदि यह किसी समस्या के रूप में दिखाई नहीं दे रहा है तो इसके बारे में चिंता न करें जब तक कि यह न हो। यदि तार आपको स्मृति समस्या उत्पन्न कर रहे हैं तो यह बाद की तारीख में एक आसान फिक्स है। अन्यथा एक स्ट्रिंग का उपयोग करें और स्मृति समस्याओं के बारे में भी न सोचें। –
मेरे पास एक बहुत ही गहन तर्क है जो हजारों में स्मृति को संग्रहीत करता है ताकि हर छोटी मदद मिल सके। –
@ विलियम यदि प्रदर्शन महत्वपूर्ण है, तो क्यों न 'enum LanguageCode: short' घोषित करें और 2 बाइट्स सहेजें? –