این مقاله در مورد بهینهسازی عملکرد برنامههای NET. از طریق تنظیم Garbage Collector (GC) بحث میکند.
Garbage Collector .NET چیست؟
- حافظه را با آزاد کردن خودکار اشیاء بلااستفاده مدیریت میکند.
- از یک مدل نسلی استفاده میکند:
- نسل 0: اشیاء با عمر کوتاه.
- نسل 1: اشیاء بازمانده از جمعآوری نسل 0.
- نسل 2: اشیاء با عمر طولانی.
- میتواند باعث بروز مکثی در طول جمعآوری شود.
چرا GC را تنظیم کنیم؟
- تنظیمات پیشفرض ممکن است برای برنامههای با عملکرد بالا بهینه نباشند.
- برای موارد زیر حیاتی است:
- برنامههای با تأخیر کم (به عنوان مثال، بازیها، پلتفرمهای معاملاتی).
- برنامههای با توان عملیاتی بالا (به عنوان مثال، حجم درخواستهای زیاد).
حالتهای GC
- GC ایستگاه کاری (Workstation GC): برای برنامههای دسکتاپ/کلاینت طراحی شده است.
- برای عملکرد تک رشتهای و پاسخگویی بهینه شدهاست.
- GC سرور (Server GC): ایدهآل برای برنامههای چند رشتهای با توان عملیاتی بالا.
- از چندین رشته برای جمعآوری استفاده میکند.
- توان عملیاتی را بر پاسخگویی اولویت میدهد.
- حالت را میتوان در
runtimeconfig.json یا به صورت برنامهنویسی تنظیم کرد.
استراتژیهای تنظیم
- حالت GC مناسب را انتخاب کنید: ایستگاه کاری برای رابط کاربری/تک رشتهای، سرور برای بکاند/چند رشتهای.
- رویدادهای GC را نظارت کنید: از ابزارهایی مانند
dotnet-trace، PerfView یا Visual Studio Profiler برای شناسایی جمعآوریهای مکرر نسل 2 یا زمانهای مکث بالا استفاده کنید. - فشار تخصیص را کاهش دهید: ایجاد شیء را به حداقل برسانید، از اشیاء مجدداً استفاده کنید (به عنوان مثال، دستهبندی شیء)، در صورت لزوم ساختارها را به کلاسها ترجیح دهید.
- از Span و Memory استفاده کنید: از آنها برای کار با برشهای داده بدون تخصیص حافظه استفاده کنید.
- پین کردن اشیاء بزرگ: از آن برای کاهش تکهتکه شدن Heap اشیاء بزرگ (LOH) استفاده کنید.
- تنظیم GC همزمان: با متغیرهای محیطی (به عنوان مثال،
DOTNET_GCHeapCount، DOTNET_GCLatencyLevel) آنرا تنظیم کنید. - از Finalizerها اجتناب کنید: سربار ایجاد میکنند. فقط در صورت لزوم استفاده کنید و سبک نگه دارید.
مثال عملی (API وب با توان عملیاتی بالا)
- استفاده از GC حالت سرور.
- تخصیصها را کاهش دهید (به عنوان مثال، از
StringBuilder استفاده کنید). - با استفاده از ابزارهایی مانند
dotnet-counters نظارت و تنظیم کنید.
نتیجهگیری
تنظیم مؤثر GC مستلزم درک حجم کاری برنامه، انتخاب حالت GC صحیح و مدیریت استفاده از حافظهاست. این روشها عملکرد برنامه NET. را به حداکثر میرسانند.
مشاهده مطلب اصلی