سؤال

وأود الحصول على رد من شخص ما في الواقع البرمجة في الوقت الحقيقي في C # أو يفهم حقا الداخلية اللغة.

وأنا أعلم أن الاستثناءات لا ينبغي أن تستخدم للتعامل مع معالجة العادي، ولكن فقط للكشف عن حالات الخطأ. هناك الكثير من النقاش حول هذا الموضوع.

وأود أن أعرف إذا كان هناك أي وقت التشغيل تباطؤ من مجرد وجود كتلة حاول / catch في المكان (الذي لم يمسك استثناء إلا سوف يكون البرنامج لإنهاء أي حال). كتلة المحاولة / المصيد هو داخل دالة التي يجب استدعاء مرارا وتكرارا. وأظن هناك فقط بأقل تكلفة ممكنة.

ويمكن كميا تكلفة من حيث دورات CPU، أو مهام أخرى (نفس تكلفة الضرب النقطة العائمة)، أو بطريقة أخرى؟

ونحن استخدام Microsoft C # .NET 3.5 تحت النوافذ XP.

هل كانت مفيدة؟

المحلول

الاستثناءات

و. NET لديها التكاليف العامة جدا، منخفضة جدا ما لم يتم طرح فيها. وجود كتلة حاول / catch في مكان يكون لها تأثير أداء الحد الأدنى للغاية. لقد وجدت ما يقرب من أي تأثير، حتى في سريعة جدا، حلقات ضيقة، إلى وجود معالجة الاستثناء في المكان.

ولكن، والاستثناءات في. NET غالية جدا عندما كنت القيت. فإنها تميل إلى أن الكثير عالية التأثير على الأداء إذا رمى بها من العديد من اللغات الأخرى. ويرجع ذلك إلى معلومات مكدس كامل استقاها عندما يتم إنشاء استثناء، وما إلى ذلك.

وهذا هو السلوك عكس بعض اللغات الأخرى، مثل الثعبان، حيث معالجة الاستثناء لديه ارتفاع تكلفة، ولكن رمي هو في الواقع performant للحد ما.

ومع ذلك، إذا كنت قلقا، وأود أن أقترح عليك لمحة روتينك، واختبار ذلك بنفسك. وكانت هذه تجربتي بعد قدرا كبيرا من التنميط الأداء. ليس هناك بدائل لقياس في مصدر برنامج الخاص بك.

نصائح أخرى

ومناقشة جيدة، مع المقاييس، من آثار أداء الصيد محاولة هنا.

حاول / كتل الصيد أداء تؤذي عندما لا يتم طرح الاستثناءات؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top