Mohsen Rajabi
Mohsen Rajabi
خواندن ۲ دقیقه·۷ ساعت پیش

چرا استفاده از استثناها باید استثنایی باشند ؟


در مقاله ایی که Matt Warren نوشته، خیلی خوب توضیح میده که، چرا استثناها باید استثنایی باشند.

Why Exceptions should be Exceptional

نکته ایی که وجود داره این هست که باید استفاده از Exception به صورت نادر و خاص باشد و نباید در فلو عادی برنامه رخ دهد. برای مثال در دستورات العمل های کد نویسی NASA استفاده از Exception در خیلی مواقع ممنوع است. در دستور العمل های ماکروسافت برای توسعه هم استفاده از Exception در فلو عادی ممنوع است. بیایید یک نمونه از بنچمارک که exception تولید میکنه و بدون اون رو ببینیم. متد result بدون exception هست و متد exception متدی هست که throw exception داره. تفاوت سرعت رو مشاهده کنید.

نمونه 1
نمونه 1
نمونه ۲
نمونه ۲


همیشه سعی کنید برای مدیریت خطا هاتون از Result Pattern استفاده کنید. لینک آموزش

تا اینجا مزیت استفاده کمتر از Exception رو دیدیم. اما در Net. چه اتفاقی افتاد.

همه چیز از یک issues در سال 2019 روی پروژه runtime شروع شد. این درخواست توسط chrishaly ایجاد شده بود. ماجرای این issues این بود که چرا ایجاد Exception روی Net. حدود 10 برابر کند تر از زبان Java است. در این درخواست یک سناریو ایجاد Exception به زبان Net. و Java نوشته شده بود که نشان می داد در Net. بسیار کند تر عمل میکنه.به فاصله کوتاهی این موضوع در یک issues دیگر مطرح شد.

لینک issues

لینک issues

بریم یک نگاهی کنیم به کد های ماکروسافت، اگر نگاهی به کد های net. بندازید متوجه میشید که خیلی جاها از throw exception برای هندل کردن خطا استفاده شده است و این باعث کندی و اختلال زیاد می شود. ایجاد Exception بسیار کند هست.

برای نمونه من یک پروژه متوسط نوشته شده که هیچ exception دستی در آن ایجاد نمی شود و بر اساس Result Pattern خطا ها هندل می شود، متریک ش رو بهتون نشون میدم. حالا نگاه کنید چه مقدار exception رخ میدهد ؟ به تصویر زیر دقت کنید بیشتر از 1000 بار exception رخ می دهد.

خود ماکروسافت سعی کرده در جاهایی که Exception میدهد رو بازنویسی کنه. مثل این قسمت که در HttpConnectionPool که throw exception باعث کندی زیادی میشد در Net 7. تغییر داده. لینک

اما بزرگترین تغییری که در این زمینه داشتیم در Net 9. بود که باز طراحی قسمت Runtime و CoreCLR ماکروسافت توانست بهبودی زیادی ایجاد کند. چند مورد از بهبود ها در این قسمت ها انجام شده است.

لینک

لینک

لینک

نتیجه این تغییرات باورنکردی بود. در سناریو های مختلف بین حدود 50 تا 76 درصد بهبود.

همین تغییرات نسبتا ساده باعث شده شما با آپدیت Net. خودتون یک performance زیادی به دست بیاورد.


کد نویسیپرفورمنسبنچمارکدات نتسی شارپ
Web Developer
شاید از این پست‌ها خوشتان بیاید