۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نحوه استفاده از EventCounters در NET Core

از EventCounters در NET Core استفاده کنید تا در زمان واقعی از عملکرد برنامه خود اطلاعاتی کسب کنید.

از EventCounters در NET Core استفاده کنید تا در زمان واقعی از عملکرد برنامه خود اطلاعاتی کسب کنید.

هنگامی که در برنامه‌های NET یا NET Core کار می‌کنید، اغلب می‌خواهید عملکرد برنامه خود را نمایه کنید تا قبل از استقرار برنامه در محیط تولید، از تنگناهای احتمالی آگاه شوید. EventCounters مجموعه‌ای از معیارهای عملکرد را ارائه می‌کند که می‌توانید برای این کار استفاده کنید.

این مقاله نحوه کار با EventCounters در NET Core را مورد بحث قرار می‌دهد و نمونه‌هایی از کدها را برای کمک به شما در شروع کار ارائه می‌کند. برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

یک پروژه برنامه کاربردی کنسول در ویژوال استودیو ایجاد کنید

ابتدا، اجازه دهید یک پروژه برنامه کاربردی کنسول NET Core در ویژوال استودیو ایجاد کنیم. با فرض اینکه Visual Studio 2022 در سیستم شما نصب شده است، مراحل ذکر شده در زیر را دنبال کنید تا یک پروژه برنامه کاربردی کنسول NET Core جدید در Visual Studio ایجاد کنید.

  1. Visual Studio IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “Console App (.NET Core)” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. بعدی را کلیک کنید.
  7. در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، «NET 7.0 (Standard Term Support)» را به عنوان نسخه چارچوبی که می خواهید استفاده کنید انتخاب کنید.
  8. روی ایجاد کلیک کنید.

ما از این پروژه برنامه کاربردی کنسول NET 7 برای کار با EventCounters در بخش‌های بعدی این مقاله استفاده خواهیم کرد.

نمودارهای رابطه ماستودون

EventCounter چیست؟

EventCounters همتای بین پلتفرمی، سبک وزن و NET Core برای شمارشگرهای عملکرد .NET Framework برای ویندوز هستند. آنها APIهایی برای جمع آوری داده های عملکرد سبک در زمان واقعی در برنامه های NET Core شما هستند.

EventCounter یک ویژگی EventSource است که برای ثبت یک معیار عملکرد سطح پایین خاص طراحی شده است. EventCounter های مختلف استفاده از CPU، مصرف حافظه، تعداد رشته ها و بسیاری از جنبه های دیگر عملکرد زمان اجرا .NET Core و ASP.NET Core را ردیابی می کنند.

برای استفاده از EventCounters در NET Core، ابتدا باید کلاسی ایجاد کنید که کلاس System.Diagnostics.Tracing.EventSource را گسترش دهد. سپس می‌توانید هر رویداد شمارنده‌ای را که معیارهای عملکردی را که می‌خواهید ردیابی کنید ارائه می‌کند، پیاده‌سازی کنید. می توانید داده های شمارنده عملکرد منتشر شده توسط EventCounters را با استفاده از هر تعداد ابزار نظارت بر عملکرد مشاهده کنید. ما از ابزار dotnet-counters مفید در اینجا استفاده خواهیم کرد. .

نصب شمارنده های دات نت

برای شروع استفاده از ابزار dotnet-counters، ابتدا باید آن را با استفاده از دستور زیر در پنجره کنسول نصب کنید.

dotnet tool install --global dotnet-counters

eventcounters 01

شکل ۱. نصب شمارنده دات نت.

پس از نصب دات نت شمارنده، F5 را فشار دهید تا برنامه کنسولی که در بالا ایجاد کردیم اجرا شود. شکل ۲ زیر برنامه کنسول را در حال اجرا نشان می دهد.

eventcounters 02

شکل ۲. اجرای برنامه پیش‌فرض کنسول NET Core.

ابزار شمارنده دات‌نت به شما امکان می‌دهد شمارنده‌های عملکرد را در برنامه‌های NET Core خود بررسی کنید. برای نمایش لیستی از فرآیندهای قابل نظارت، کافیست دستور زیر را در پنجره فرمان اجرا کنید.

dotnet-counters ps

شکل ۳ لیستی از فرآیندهای در حال اجرا را نشان می دهد.

Angular 14 با فرم های تایپ شده، اجزای مستقل وارد می شود

eventcounters 03 rev

هنگامی که برنامه کنسول شروع به کار کرد، دستور زیر را در پنجره فرمان برای نظارت بر برنامه کنسول اجرا کنید.

dotnet-counters monitor -n EventCountersDemo

eventcounters 04

شکل ۴. نظارت بر برنامه کنسول ما در شمارنده های دات نت.

EventCounters را در NET Core اجرا کنید

برای انتشار شمارنده های عملکرد خود در NET Core، باید یک کلاس EventSource پیاده سازی کنید. دلیل آن این است که EventCounter بر روی مکانیسم ردیابی NET Core توسعه یافته است.

یک کلاس با نام CustomEventSource در فایلی به همین نام با پسوند cs ایجاد کنید. از آنجایی که همه EventCounter باید در مقابل یک EventSource ثبت شوند، کلاس CustomEventSource شما باید کلاس System.Diagnostics.Tracing.EventSource را گسترش دهد.

کد ایجاد شده پیش‌فرض فایلی را که ایجاد کرده‌اید با کد منبع داده‌شده در فهرست زیر جایگزین کنید.

    [EventSource(Name = "EventCountersDemo.CustomEventSource")]
    public sealed class CustomEventSource : EventSource
    {
        public static readonly CustomEventSource Instance = new();
        private readonly IncrementingEventCounter _incrementingEventCounter;
        private bool _disposedValue;
        private CustomEventSource()
        {
            _incrementingEventCounter = new
            IncrementingEventCounter("MyCustomCounter", this)
            {
                DisplayName = "Incrementing Counter"
            };
        }
        public void IncreaseCounterValue()
        {
            _incrementingEventCounter.Increment();
        }
        public void Dispose() => Dispose(true);
        protected override void Dispose(bool disposing)
        {
            if (!_disposedValue)
            {
                if (disposing)
                {
                    _incrementingEventCounter?.Dispose();
                }
                _disposedValue = true;
            }
            base.Dispose(disposing);
        }
    }

شمارش رویداد را با استفاده از کمی کد سفارشی راه اندازی می کنیم. برای این کار، کد تولید شده پیش فرض فایل Program.cs را با کد زیر جایگزین کنید.

using EventCountersDemo;
Task.Run(async () => await CounterIncrementor());
Console.ReadKey();
async Task CounterIncrementor()
{
    while (true)
    {
        CustomEventSource.Instance.IncreaseCounterValue();
        await Task.Delay(500);
    }
}

برای نظارت بر برنامه کنسول، دستور زیر را در پنجره فرمان اجرا کنید:

dotnet-counters monitor -n EventCountersDemo --counters EventCountersDemo.CustomEventSource

پارامتر –counters ما را قادر می سازد منبع رویداد خاصی را که به نظارت بر آن علاقه مندیم مشخص کنیم. در این مثال، نام منبع رویداد EventCountersDemo.CustomEventSource است.

نحوه استفاده از کلمات کلیدی in، out و ref در NET Core

شکل ۵ خروجی اجرای دستور قبلی را نشان می دهد.

eventcounters 05

شکل ۵. نظارت بر CustomEventSource ما در شمارنده‌های نقطه‌نت.

EventCounters را در NET Core مصرف کنید

EventCounters را می توان با استفاده از EventLKisteners و EventPipes مصرف کرد. شما می توانید EventCounters را به دو روش مختلف، in-proc و out-of-proc مصرف کنید. می‌توانید با استفاده از EventListener API. برای استفاده از یک شمارنده به روشی خارج از پروک، باید از یک EventPipe استفاده کنید. .

فهرست کد زیر نشان می‌دهد که چگونه می‌توانید EventCounters را با استفاده از کلاس EventListener به صورت in-proc مصرف کنید.

   public sealed class CustomEventCounterListener : EventListener
   {
       protected override void OnEventSourceCreated(EventSource eventSource)
       {
           if (eventSource.Name == "EventCountersDemo.CustomEventSource")
           {
               var args = new Dictionary<string, string?> { ["EventCounterIntervalSec"] = "1" };
               EnableEvents(eventSource, EventLevel.Verbose, EventKeywords.All, args);
           }
       }
       protected override void OnEventWritten(EventWrittenEventArgs eventWrittenEventArgs)
       {
           if (!eventWrittenEventArgs.EventName.Equals("EventCounters"))
           {
               return;
           }
           if (eventWrittenEventArgs.Payload.First() is not IDictionary<string, object> payload)
           {
               return;
           }
           for (int i = 0; i < eventWrittenEventArgs.Payload.Count; ++i)
           {
               if (eventWrittenEventArgs.Payload[i] is IDictionary<string, object> eventPayload)
               {
                   Console.WriteLine($"{payload["DisplayName"]} - {payload["Increment"]}");
               }
           }
       }
   }

EventSources معمولاً برای تشخیص، ثبت و ردیابی رفتار برنامه استفاده می شود. از طرف دیگر، EventCounter برای پروفایل عملکرد، بهینه‌سازی و اهداف تشخیصی مناسب‌تر است. استفاده اولیه از EventCounters به ​​عنوان یک ابزار تشخیصی یا پروفایل است، نه به عنوان ابزاری برای نظارت بر سلامت و عملکرد در تولید. برای نظارت بر برنامه‌های کاربردی مستقر در تولید، باید از سیستم‌های نظارت و گزارش سطح بالاتر استفاده کنید.