2009-08-28 15 views
7

मुझे किसी ऐसे व्यक्ति से प्रतिक्रिया चाहिए जो वास्तव में सी # में रीयल-टाइम प्रोग्रामिंग करता है या जो वास्तव में भाषा आंतरिक को समझता है।सी # रीयल टाइम कैच

मुझे पता है कि सामान्य प्रसंस्करण को संभालने के लिए अपवादों का उपयोग नहीं किया जाना चाहिए, लेकिन केवल त्रुटि स्थितियों का पता लगाने के लिए। उस विषय पर बहुत सी चर्चा है।

मैं जानना चाहता हूं कि जगह पर एक कोशिश/पकड़ ब्लॉक होने से कोई रन टाइम धीमा हो गया है (जो किसी भी अपवाद को तब तक नहीं लेता जब तक प्रोग्राम को समाप्त नहीं करना पड़ेगा)। कोशिश/पकड़ ब्लॉक एक समारोह के अंदर है जिसे बार-बार कहा जाना चाहिए। मुझे संदेह है कि केवल न्यूनतम लागत है।

क्या सीपीयू चक्र, या अन्य कार्यों (फ्लोटिंग पॉइंट गुणा के समान लागत) के मामले में लागत का आकलन किया जा सकता है, या किसी अन्य तरीके से?

हम विंडोज एक्सपी के तहत माइक्रोसॉफ्ट सी # नेट 3.5 का उपयोग करते हैं।

+1

अपवाद और प्रदर्शन पर जॉन स्कीट के संसाधन पर एक नज़र डालें: http://www.yoda.arachsys.com/csharp/exceptions.html –

उत्तर

10

.NET अपवादों को बहुत कम, बहुत कम ओवरहेड लागत होती है जब तक कि उन्हें फेंक दिया न जाए। जगह पर एक कोशिश/पकड़ ब्लॉक होने के बहुत कम प्रदर्शन प्रभाव होगा। जगह पर अपवाद संभालने के लिए, मुझे बहुत तेज़, तंग लूपों में भी लगभग कोई प्रभाव नहीं मिला है।

हालांकि, .NET में अपवाद बहुत महंगा हैं जब उन्हें फेंक दिया जाता है। यदि आप उन्हें कई अन्य भाषाओं से फेंक देते हैं तो वे प्रदर्शन पर बहुत अधिक प्रभाव डालते हैं। यह अपवाद बनने पर पूर्ण स्टैक जानकारी के कारण होता है, आदि।

यह कुछ अन्य भाषाओं जैसे कि पाइथन के विपरीत व्यवहार है, जहां अपवाद हैंडलिंग की लागत अधिक है, लेकिन फेंकना वास्तव में काफी प्रदर्शनकारी है।

हालांकि, यदि आप चिंतित हैं, तो मैं सुझाव दूंगा कि आप अपना दिनचर्या प्रोफाइल करें और स्वयं परीक्षण करें। काफी प्रदर्शन प्रोफाइलिंग के बाद यह मेरा अनुभव रहा है। अपने कोडबेस में मापने के लिए कोई प्रतिस्थापन नहीं है।

+0

वास्तव में, एक स्टैक ट्रेस जब तक आप का उपयोग नहीं होती है स्टैकट्रेस संपत्ति, या यदि अपवाद एक प्रक्रिया सीमा (यानी रिमोटिंग/डब्ल्यूसीएफ/आदि) पास करता है तो अपवाद बनाना बहुत कम लागत है, क्योंकि निर्माण केवल कुछ गुण निर्धारित करता है। फेंक प्रक्रिया सेटिंग द्वारा एक मामूली लागत की जाती है StackCrawlMarks जो स्टैकट्रेस अनुरोध किए जाने पर और स्टैक क्रॉल को सुविधाजनक बनाता है ... लेकिन .NET 2.0 में, ट्रेस प्रत्येक फेंक नहीं होता है जब तक आप वास्तव में इसे एक्सेस नहीं करते। – jrista

+0

हां - मैं वास्तव में स्टैक मार्किंग तंत्र का जिक्र कर रहा था, लेकिन मेरा जवाब स्पष्ट नहीं था। हालांकि, यह मेरे प्रोफाइलिंग में, काफी महत्वपूर्ण ओवरहेड है (यह perf मान रहा है। महत्वपूर्ण सिस्टम, यद्यपि)। रिको मारियानी के पास एक अच्छा ब्लॉग पोस्ट है जो बता रहा है कि क्यों, लेकिन मेरे लिए, यह मुद्दा अतिरिक्त कैश मिस और पेज दोष था: http://blogs.msdn.com/ricom/archive/2006/09/25/771142.aspx –

+0

धन्यवाद उस जानकारी के लिए। दुर्भाग्यवश हमारे पास हमारे कोड को प्रोफाइल करने के लिए टूल नहीं हैं ... हमें बस सर्वोत्तम प्रथाओं का पालन करना होगा। –

संबंधित मुद्दे