जहां अंतर्निहित प्रकार संकुचन विशिष्ट स्थितियों रहे हैं उदाहरण के प्रदर्शन से संबंधित के लिए, कुछ लाभ लाता है या किसी खास के लिए मजबूर अप्रबंधित कोड में इंटरफेसिंग करते समय मेमोरी लेआउट।
इस नमूने पर विचार करें:
using System;
public enum Operations_PerHourType // : byte
{
Holes = 1,
Pieces = 2,
Sheets = 3,
Strips = 4,
Studs = 5
}
class Program
{
static void Main()
{
long before = GC.GetTotalMemory(false);
var enums = new Operations_PerHourType[10000];
long after = GC.GetTotalMemory(false);
Console.WriteLine(after - before);
// output (byte): 12218 (I'm using Mono 2.8)
// output (Int32): 40960
}
}
इस कोड की खपत लगभग 40 ढेर के KB। अब अंतर्निहित प्रकार को byte
के रूप में निर्दिष्ट करें (असम्बद्ध) और पुन: संकलित करें। वाह। अचानक हमें केवल 10 केबी की जरूरत है।
इस तरह की स्मृति को संपीड़ित करने से कभी-कभी विशेष पहुंच पैटर्न और डेटा आकारों के आधार पर प्रोग्राम धीमा नहीं हो सकता है। कुछ माप करने और अन्य संभावित परिस्थितियों को सामान्यीकृत करने का प्रयास करने के लिए निश्चित रूप से जानने का कोई तरीका नहीं है। छोटे डेटा का अनुक्रमिक ट्रैवर्सल आमतौर पर तेज़ होता है।
हालांकि, संकीर्ण प्रकारों को निर्दिष्ट करने की आदत विकसित करना क्योंकि यह आमतौर पर संभव है और कभी-कभी महत्वपूर्ण है, यह एक अच्छा विचार नहीं है। आसपास के व्यापक डेटा प्रकारों के स्मृति संरेखण के कारण मेमोरी बचत शायद ही कभी भौतिक हो जाती है। प्रदर्शन पैडिंग बाइट्स को दूर करने के लिए आवश्यक अतिरिक्त निर्देशों के कारण या तो समान या थोड़ा खराब होता है।
के रूप में एक और जवाब पहले से ही यह अच्छी तरह से कर दिया गया है, Int32
भीड़ है जो रनटाइम के लिए अनुकूलित है का पालन करें, जब तक आप अपने आवेदन में रूपरेखा और को संबोधित वास्तविक स्मृति हॉग शुरू कर दिया है।
स्रोत
2012-04-18 21:23:03
स्टोरेज एक बाइट या इंट क्यों है या नहीं? बाइट के उपयोग को मजबूर करने की कोशिश में आपकी प्रेरणा क्या है? –
मैंने तब तक नहीं किया जब तक कि मैं माइक्रोसॉफ्ट कोड विश्लेषण उपकरण चलाता हूं। यह एक Int32 का उपयोग करने की सिफारिश की। मैं उत्सुक हूँ क्यों। मैंने शुरुआत में बाइट का इस्तेमाल किया क्योंकि मुझे लगता है कि यह प्रदर्शन के लिए बेहतर होगा। कम जगह। – Kevin
http://stackoverflow.com/questions/5005319/why-cant-i-declare-an-enum-inheriting-from-byte-but-i-can-from-byte –