.NET में किसी जटिल ऑब्जेक्ट के कुल आकार को निर्धारित करने के तरीके हैं? यह वस्तु अन्य वस्तुओं से बना है और अन्य जटिल वस्तुओं के संदर्भ रख सकती है। इस वस्तु द्वारा encapsulated कुछ वस्तुओं पीओडी हो सकता है, अन्य शायद नहीं हो सकता है।.NET में जटिल ऑब्जेक्ट के आकार को निर्धारित करने के तरीके?
उत्तर
आपके पास "जटिल वस्तु" नहीं है, यह एक ऑब्जेक्ट ग्राफ़ है। अपने कुल आकार को निर्धारित करने के लिए, आपको उस ग्राफ़ को चलने की आवश्यकता है - कुछ रूट ऑब्जेक्ट से शुरू करना, और संदर्भ प्रकारों के फ़ील्ड को गिनने और उनके मानों को पुनर्प्राप्त करने के लिए प्रतिबिंब का उपयोग करना (और निश्चित रूप से लूप की जांच करना)।
ग्राफ़ में किसी विशेष ऑब्जेक्ट का आकार प्राप्त करने के लिए, this answer to a related question देखें, लेकिन ध्यान दें कि यह एक बुरा हैक है, पूरी तरह असमर्थित है, तोड़ सकता है (और पहले ही टूटा जा सकता है), और इसके परिणामस्वरूप थोक बिल्ली का बच्चा नरसंहार हो सकता है स्वर्गीय क्षेत्रों उस ने कहा, सटीक मूल्य प्राप्त करने के लिए कोई "गैर-हैकी" तरीका नहीं है, क्योंकि यह परिभाषा द्वारा कार्यान्वयन विवरण है - इसके लिए आपके पास कोई उपयोग नहीं होना चाहिए। और डीबगिंग/प्रोफाइलिंग के दौरान ऐप के मेमोरी उपयोग को खोजने के उद्देश्य से, हैक काफी अच्छा है।
धन्यवाद पावेल। जब मैंने सवाल पूछा, तो मैं जटिलताओं को समझ गया, मैं सिर्फ उत्सुक था कि अगर कोई पहले से ही ऑब्जेक्ट ग्राफ़ ट्रैवर्सल बना चुका है जिसने इसकी गणना की है :) – Polaris878
System.Runtime.InteropServices.Marshal.SizeOf()
एक शॉट दें।
'मार्शल.SizeOf()' subobjects के आकार को ध्यान में नहीं रख सकता है। – drharris
ध्यान रखें कि यह एक सुरक्षा महत्वपूर्ण कार्य है, इसलिए दुर्भाग्यवश कई संदर्भों में काम नहीं करता है। –
यह वस्तु के मार्शल प्रतिनिधित्व का आकार देता है, जो काफी समान नहीं है। –
ट्रिकी ...
क्या होगा यदि दो वस्तुओं एक ही स्ट्रिंग चर को इंगित। स्ट्रिंग का कौन सा "मालिक" है? यह मुझे लगता है कि आपको एक सही जवाब प्राप्त करने के लिए एक कचरा संग्रह अनुकरण करने की आवश्यकता है। बिल्कुल हल्के वजन नहीं।
स्ट्रिंग यहां एक अच्छा उदाहरण नहीं है क्योंकि यह अपरिवर्तनीय है। –
@ पॉल: अपरिवर्तनीयता को इसके साथ क्या करना है? मुद्दा यह है कि किसी ऑब्जेक्ट को उस स्ट्रिंग का संदर्भ हो सकता है जो इसे बाहर से दिया गया है (उदा। एक फ़ाइल नाम)। क्या वह स्ट्रिंग ऑब्जेक्ट से "संबंधित" है या नहीं? इसे अपने आकार के हिस्से के रूप में गिना जाना चाहिए या नहीं? –
बस रखें, जानने का कोई तरीका नहीं है। मान लें कि सभी ऑब्जेक्ट्स क्रमबद्ध हैं, आप बाइनरी ब्लॉबटर को एक बाइनरी ब्लॉब में क्रमबद्ध करने के लिए उपयोग कर सकते हैं, और उसके बाद इसका आकार पढ़ सकते हैं। हालांकि, इसमें कुछ मेटाडेटा शामिल होंगे, और वास्तविक ऑब्जेक्ट आकार को बढ़ाया जाएगा (लेकिन यह एक उचित अनुमान होगा)।
मूल्य प्रकारों के लिए, आप Marshal.SizeOf()
का उपयोग करेंगे, केवल यह किसी भी उप-प्रोजेक्ट को ध्यान में रखता नहीं है। यह सूचकांक के आकार के रूप में किसी भी आंतरिक संदर्भ प्रकार की गणना करेगा।
प्रतिबिंब एक और तरीका है, लेकिन किसी भी निजी सदस्यों को स्मृति लेने का खुलासा नहीं करेगा। इसलिए, जब तक कि मैं गलत नहीं हूं, वास्तव में ऐसा करने का कोई तरीका नहीं है।
पहले StackOverflow पर कहीं और उत्तर दिया:
Find size of object instance in bytes in c#
आप (सूचक इस के लिए आवश्यक कार्रवाई की वजह से) असुरक्षित कोड लागू करने के लिए की जरूरत है - कोड इस तरह दिखता है:
static unsafe int CalcSize(object obj)
{
RuntimeTypeHandle th = obj.GetType().TypeHandle;
int size = *(*(int**)&th + 1);
return size;
}
यह भी याद रखें प्रोजेक्ट सेटिंग्स (प्रोजेक्ट-> बिल्ड टैब) को "असुरक्षित कोड की अनुमति दें" पर चिह्नित करने के लिए।
- 1. .NET ऑब्जेक्ट आकार
- 2. .Net में तारों को टोकन करने के तरीके क्या हैं?
- 3. जावा: फ़ाइल के प्रकार को निर्धारित करने के तरीके को कैसे निर्धारित किया जाए?
- 4. स्ट्रिंग के आकार को निर्धारित करने के लिए, और इसे
- 5. किसी ऑब्जेक्ट को परिभाषित करने के तरीके को कैसे जांचें?
- 6. ऑब्जेक्ट का आकार निर्धारित करें: स्कैला/एसबीटी
- 7. .NET: बाइनरी को ऑब्जेक्ट [DataContract] के साथ ऑब्जेक्ट को क्रमबद्ध करने के लिए कैसे करें?
- 8. जटिल ऑब्जेक्ट ग्राफ़
- 9. जटिल आकार पहचान
- 10. मैं अपने मॉनिटर के सही पिक्सेल आकार को .NET में कैसे निर्धारित करूं?
- 11. 2 जटिल ऑब्जेक्ट ग्राफ़
- 12. एंड्रॉइड व्यू के आकार को पिक्सल में कैसे निर्धारित करें?
- 13. सौर में पदानुक्रमित करने के तरीके?
- 14. Django "फ़ाइल के आकार को निर्धारित करने में असमर्थ" tempfile के साथ त्रुटि। समकालीन फ़ाइल
- 15. जटिल प्रणाली को डिजाइन करने के दो तरीके: टॉप-डाउन बनाम नीचे-ऊपर
- 16. ASP.NET MVC में रीडायरेक्ट के साथ जटिल ऑब्जेक्ट पास करें?
- 17. जावा में ऑब्जेक्ट के आकार की गणना
- 18. जटिल समानता के लिए ऑब्जेक्ट.गेटहाशकोड() को कार्यान्वित करने के बारे में मुझे कैसे जाना चाहिए?
- 19. ऑब्जेक्ट को कॉल करने के बराबर हटाएं (ऑब्जेक्ट)। ऑब्जेक्ट()
- 20. विज़ुअलाइज़ करने के तरीके
- 21. यह निर्धारित करने के लिए कि लिंक-टू-एसक्यूएल ऑब्जेक्ट
- 22. Thread.interrupt() ध्वज को साफ़ करने के तरीके
- 23. NSNotificationCenter समस्याओं को डीबग करने के तरीके?
- 24. जटिल ऑब्जेक्ट ग्राफ़ की समानता के लिए परीक्षण कैसे करें?
- 25. सी ++ 11 में बिग्नम को लागू करने के लिए सबसे कुशल शब्द आकार निर्धारित करना?
- 26. क्या .NET ऐप्स में Google प्रमाणक को कार्यान्वित करने के तरीके पर कोई ट्यूटोरियल है?
- 27. एक और कस्टम जटिल प्रकार के लिए एक कस्टम जटिल प्रकार परिवर्तित करने के लिए कैसे
- 28. जटिल बूल स्थिति को स्ट्रिंग से बूल में .NET
- 29. एएसपी.Net कैश के कुल आकार को कैसे निर्धारित करें?
- 30. रूबी ऑब्जेक्ट के आकार को मापने के लिए कैसे?
ऑब्जेक्ट्स serializable हैं? –
वे हो सकते हैं :) अस्पष्ट होने के लिए खेद है, लेकिन मैं इस प्रश्न को यथासंभव सामान्य बनाने की कोशिश कर रहा हूं। – Polaris878
सी #/.NET संदर्भ में "पीओडी" क्या है? यह एक सी ++ शब्द है ... –