2008-09-16 13 views
14

मैं उन गुणों की तलाश में हूं जिनके लिए मैं लोडर, जेआईटी कंपाइलर या एनजेएन को संकेत देकर अपने नेट एप्लिकेशन के लिए सर्वश्रेष्ठ रनटाइम प्रदर्शन सुनिश्चित करने के लिए उपयोग कर सकता हूं।क्या विशेषता रनटाइम .NET प्रदर्शन में मदद करते हैं?

उदाहरण के लिए हम DebuggableAttribute जो करने के लिए डिबग नहीं स्थापित किया जाना चाहिए और अनुकूलतम प्रदर्शन के लिए अनुकूलन को अक्षम नहीं है।

[Debuggable(false, false)] 

वहाँ किसी भी अन्य लोगों के बारे में मुझे पता होना चाहिए?

उत्तर

5

ऐक्मा-335 आराम अपवाद अनुलग्नक एफ में (ई-आराम कॉल तथाकथित) "अनिश्चित दोष" से निपटने के लिए कुछ और CompilationRelaxations निर्दिष्ट करता है, लेकिन वे माइक्रोसॉफ्ट द्वारा उजागर नहीं किया गया है।

विशिष्ट रूप से संकलन रिलेक्सेशन। रेलैक्सएड्रे अपवाद और संकलन रिलेक्सेशंस। रिलेक्सड नल रेफरेंस अपवाद का उल्लेख किया गया है।

यह intersting होगी क्या होता है जब तुम सिर्फ CompilationRelaxationsAttribute के ctor में कुछ पूर्णांकों की कोशिश;)

+0

http://www.gnu.org/software/dotgnu/pnetlib-doc/System/Runtime/CompilerServices/CompilationRelaxations.html –

1

मुझे एक और मिला: NeutralResourcesLanguageAttributethis ब्लॉग पोस्ट के अनुसार यह वर्तमान (तटस्थ) असेंबली अगर संस्कृति निर्दिष्ट करके लोडर को सही उपग्रह असेंबली ढूंढने में तेज़ी से मदद करता है।

[NeutralResourcesLanguageAttribute("nl", UltimateResourceFallbackLocation.MainAssembly)] 
2

और एक और: शाब्दिक तार (तार स्रोत कोड में किया गया) स्मृति को बचाने के लिए एक पूल में डिफ़ॉल्ट interned से कर रहे हैं।

string s1 = "MyTest"; 
string s2 = new StringBuilder().Append("My").Append("Test").ToString(); 
string s3 = String.Intern(s2); 
Console.WriteLine((Object)s2==(Object)s1); // Different references. 
Console.WriteLine((Object)s3==(Object)s1); // The same reference. 

जब एक ही शाब्दिक स्ट्रिंग कई बार प्रयोग किया जाता है हालांकि यह स्मृति की बचत होती है, यह पूल बनाए रखने के लिए कुछ cpu लागत और एक बार एक स्ट्रिंग पूल में डाल दिया है यह वहाँ रहता है जब तक प्रक्रिया बंद कर दिया है।

CompilationRelaxationsAttribute का उपयोग करके आप JIT कम्पाइलर कि तुम सच में नहीं है यह प्रशिक्षु सब शाब्दिक तार करना चाहते हैं बता सकते हैं।

[assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)] 
+1

इस के साथ सावधान रहो, के रूप में होना शामिल नहीं तार वास्तव में प्रदर्शन हानि पहुंचा सकता है। आंतरिक तारों के लिए समानता तुलना केवल संदर्भ (पॉइंटर्स) की तुलना करके किया जा सकता है, जो स्ट्रिंग मानों की तुलना में बहुत तेज है। – csgero

+0

सच है, लेकिन फिर आपको कोड लिखना होगा जो स्पष्ट रूप से स्ट्रिंग इंटर्निंग का उपयोग करता है। और चूंकि आप प्रशिक्षित होने के लिए शाब्दिक पर भरोसा नहीं कर सकते हैं, आपको इसे स्वयं करना होगा (स्ट्रिंग.इनर्न)। यहां उल्लिखित विशेषता उस पर प्रभाव नहीं डालती है। –

+1

स्ट्रिंग के लिए ऑपरेटर == जानता है कि उसे संदर्भ या सामग्री की तुलना करने की आवश्यकता है या नहीं। csgero का मुद्दा यह था कि गैर-इंटर्न वाले मामले में, ऑपरेटर == को हमेशा सामग्री आधारित तुलना करना पड़ता है जो आंतरिक तारों के संदर्भ संदर्भ की तुलना में महंगा हो सकता है। –