عنوان:

‫معرفی SwitchMediator؛ جایگزینی برای MediatR


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۲/۰۵ ۰۷:۵۶
آدرس: www.dntips.ir
MediatR به دلیل تکیه بر بازتاب در زمان اجرا (runtime reflection)، از مشکلات دیباگ، زمان طولانی استارت‌آپ و گلوگاه‌های عملکرد رنج می‌برد. SwitchMediator با استفاده از C# Source Generators قصد دارد این مشکلات را حل کند.

مشکلات MediatR (بازتاب در زمان اجرا)

  • پیچیدگی دیباگ: به دلیل کد داخلی پیچیده کتابخانه و استفاده از بازتاب، قدم گذاشتن در منطق mediator دشوار است.
  • هزینه عملکرد در زمان اجرا: بازتاب و جستجوهای دیکشنری (که اغلب از طریق بازتاب پر می‌شوند) به هر درخواست تأخیر اضافه می‌کنند.
  • تأخیر در استارت‌آپ: اسکن اسمبلی‌ها و ساخت نگاشت‌های داخلی در هنگام شروع برنامه زمان می‌برد.
  • چالش‌های Trimming/AOT: بازتاب می‌تواند سازگاری کد با .NET trimming و کامپایل Ahead-of-Time (AOT) را کاهش دهد.
  • خطاهای Handler Not Found در زمان اجرا: یافتن هندلرهای از دست رفته فقط در زمان اجرا امکان‌پذیر است.

راه حل SwitchMediator (تولید کد منبع در زمان کامپایل)

  • از C# Source Generators برای تجزیه و تحلیل کد در زمان ساخت استفاده می‌کند.
  • یک پیاده‌سازی mediator مشخص و متناسب با هندلرها و پایپ‌لاین‌های برنامه تولید می‌کند.
  • کد C# بهینه شده با جستجوهای دیکشنری استاتیک برای ارسال درخواست ایجاد می‌کند.
  • هزینه عملکرد را به زمان کامپایل منتقل می‌کند و در نتیجه زمان اجرای سریع‌تری به دست می‌آید.

مزایای کلیدی SwitchMediator

  • قابلیت دیباگ پیشرفته: توسعه‌دهندگان می‌توانند مستقیماً وارد کد #C تولید شده (SwitchMediator.g.cs) شوند و منطق دقیق ارسال و اجرای پایپ‌لاین را مشاهده کنند.
  • حداکثر عملکرد: حذف بازتاب در زمان اجرا برای ارسال، منجر به سرعت بیشتر در مدیریت درخواست‌ها و اعلان‌ها می‌شود.
  • ایمنی در زمان کامپایل: هندلرهای از دست رفته منجر به خطاهای ساخت می‌شوند و از بروز خطاهای زمان اجرا جلوگیری می‌کنند.
  • سازگاری با Trimming / AOT: اجتناب از بازتاب در زمان اجرا، سازگاری مکانیزم اصلی با .NET trimming و AOT را بهبود می‌بخشد.
  • صراحت: کد تولید شده به عنوان مستندات واضح و قابل بازرسی در مورد نحوه مسیریابی درخواست‌ها و ساخت پایپ‌لاین‌ها برای هر نوع پیام عمل می‌کند.

بنچمارک‌های عملکرد

SwitchMediator در مقایسه با MediatR، دستاوردهای عملکرد قابل توجهی را نشان می‌دهد:
  • استارت‌آپ: تا 146 برابر سریع‌تر با 600 هندلر.
  • ارسال درخواست (Send): تقریباً 3 برابر سریع‌تر و تولید 3 برابر کمتر زباله.
  • انتشار اعلان (Publish): حدود 6.7 برابر سریع‌تر با صفر تخصیص حافظه.
  • اجرای پایپ‌لاین: به طور مداوم سریع‌تر و با تخصیص حافظه کمتر.


مشاهده مطلب اصلی