Performance profiler ها به طور عمده در تجزیه و تحلیل عملکرد برنامهها به توسعهدهندگان کمک میکنند. هدف ابزارهای Profiler این است که دید جزئیتری از اجرای برنامه و منابعی که در حین اجرای آن استفاده میشوند را ارائه دهند و با این کار، بخشهایی از کد که باعث عملکرد ضعیف برنامه میشوند را بهبود بخشد. وقتی صحبت از profilerهای عملکرد میشود، نامهای رایجی که به ذهن خطور میکنند عبارتند از Visual Studio Performance Profilers و اپلیکیشن Prefix محصول کمپانی Netreo. در این مقاله بر روی ابزارهای خاص پروفایل کردن برای استفاده از حافظه و CPU که در Visual Studio وجود دارند، تمرکز میکنیم.
Visual Studio Performance Profiler برای مشکلات مربوط به حافظه و CPU
VS یک محیط توسعه یکپارچه (IDE) است که برای جنبههای زیادی از توسعه نرم افزار استفاده میشود و مجموعهای از ابزارهای پروفایل کردن را هم در خود دارد. ابزار profiler عملکرد VS مانند دنیایی است که درون خود چندین ابزار برای عیب یابی (troubleshoot) مشکلات و بهبود عملکرد برنامه دارد.
دو مورد از رایجترین ابزارهای مورد استفاده در این مجموعه، ابزارهای مربوط به میزان استفاده از حافظه (Memory Usage) و میزان استفاده از CPU (CPU Usage) هستند؛ زیرا رایجترین دلیل کند بودن برنامهها معمولاً به مشکلات مربوط به حافظه و CPU برمیگردد.
ابزار Memory Usage
وجود ابزارهای پروفایل حافظه هنگام پروفایل کردن عملکرد برنامه ضروری است. ابزار Memory Usage ابزاری است که میتوانید در profiler عملکرد VS از آن استفاده کنید. این ابزار به خوبی با سناریوهای مدیریتی NET Core. اجرا میشود و بهترین ابزار در حل مسائلی مثل یافتن مکانهای نشت حافظه (memory leak)، مسیرهای کدی که مقدار زیادی حافظه به آنها تخصیص داده شده و بسیاری مسائل دیگر است.
ابزار CPU Usage
ابزار CPU Usage یکی دیگر از ابزارهای اصلی VS است و دو چیز اساسی را اندازهگیری میکند. اولین چیز، درصد استفاده از CPU در طول زمان یا درصد استفاده کلی از CPU شما است. مورد دوم، تعداد دفعاتی است که یک تابع فراخوان (CTA function) در طول زمان در پشته فراخوانی ظاهر میشود.
نحوه عیب یابی عملکرد با VS Performance Profiler
داخل ابزار VS Performance Profiler، ابزارهای profiling زیادی مانند CPU Usage، Database، Events Viewer، Memory Usage، dotNET Object Allocation Tracking، .NET Async، .NET Counter و GPU Usage را خواهید یافت. اما الان میخواهیم نگاهی دقیقتر به عیب یابی با دو ابزار کلیدی مربوط به usage منابع برنامه بیندازیم.
عیب یابی Memory Usage
ابزار Memory Usage میتواند همراه با debugger یا بدون آن اجرا شود، اما هنگام استفاده از VS Performance Profiler، بدون debugger اجرا خواهد شد. بهطورکلی فرآیندهای پروفایل کردن و و عیب یابی با ابزار Memory Usage، بیشتر برای نسخههای منتشرشدهی برنامهها توصیه میشود. مراحل استفاده از profiler Memory Usage به شرح زیر است:
- solution ابزار VS را روی گزینه Release قرار دهید. سپس گزینه Local Windows Debugger (Local Machine) را انتخاب کنید. از آنجایی که ابزار Memory Usage در VS Performance Profiler بدون debugger اجرا میشود، باید از پیکربندی Release استفاده کنید. برای این منظور یک علامت هشدار در زیر گزینه Analysis Target خواهید دید که به شما نشان میدهد باید به حالت Release منتقل شوید.
- سپس میتوانید مسیر Debug > Performance Profiler را طی کنید یا از میانبر و فشردن کلیکهای Alt + F2 وارد ابزار profiler شوید.
- در اینجا صفحه خلاصه (summary) را مشاهده خواهید کرد که در قسمت ابزارهای موجود، باید ابزار Memory Usage را انتخاب کنید.
- روی Start کلیک کنید.
- در این مرحله، diagnostic session شروع میشود و پنجره روبهروی شما نموداری را نمایش میدهد که در آن میزان استفاده برنامه از حافظه اندازهگیری شده است.
- در طول این session نیاز است که snapshot های متوالی از نمودار بگیرید تا میزان memory usage را برای لحظات خاصی مانند قلههای نمودار (که بیشترین میزان استفاده از حافظه را نشان میدهد)، ثبت کنید. برای مثال یک snapshot قبل از ظاهر شدن مشکل حافظه و یکی هم بعد از بروز مشکل بگیرید. این عکسها، دادههای مشخصی را برای مقایسه کردن در اختیارتان قرار میدهند که از طریق آنها میتوانید منبع احتمالی مشکلات مربوط به حافظه برنامه خود را شناسایی کنید.
- پس از جمعآوری snapshot های مورد نیاز و دادههای مناسب، گزنیه Stop Collection را انتخاب کنید.
- در این مرحله صفحه گزارشهای مربوط به Memory Usage را مشاهده خواهید کرد.
عیب یابی CPU Usage
هنگام عیب یابی برنامه با استفاده از ابزار CPU Usage دو اقدام اصلی وجود دارد: جمعآوری دادهها و تجزیه و تحلیل دادهها.
- جمعآوری دادههای CPU Usage
- مسیر Debug > Performance Profiler را طی کنید یا با فشردن کلیدهای Alt + F2 وارد ابزار profiler شوید.
- اکنون صفحه summary را مشاهده خواهید کرد و باید گزینه CPU Usage را از بین ابزارهای موجود انتخاب کنید.
- روی Start کلیک کنید.
- در این مرحله diagnostic session شروع میشود و نموداری مشابه شکل زیر خواهید دید. این اطلاعات میزان CPU usage برنامه را نمایش میدهد. هنگامی که جمعآوری دادهها کامل شد، گزینه Stop Collection را در گوشه سمت چپ بالای صفحه انتخاب کنید.
- پس از آن، ابزار CPU Usage دادهها را تجزیه و تحلیل میکند و گزارش مربوط به آن را نمایش میدهد. این گزارش مشکلات احتمالی CPU که بر عملکرد برنامه تأثیر میگذارند را نشان میدهد.
- تجزیه و تحلیل گزارش CPU Usage
تصویر زیر گزارش دادههای مربوط به CPU Usage را نشان میدهد و دو گروه داده مختلف را در آن میبینید: Top Functions و Hot Path.
در قسمت Top Functions، توابعی از برنامه که مقدار زیادی از CPU را اشغال میکنند، فهرست شدهاند. قسمت Hot Path هم بخشهایی از کد که از منابع CPU استفاده میکنند را نشان میدهد . توسعهدهندگان از طریق این گزارشها میتوانند مشخص کنند که کدام مناطق کد یا برنامه نیاز به بهینهسازی دارند.
ساختار درخت فراخوانی در ابزار CPU Usage
وقتی روی یکی از توابع در جدول function ها کلیک میکنید، فهرستی از توابع فراخوانیشده به شما نمایش داده میشود که فقط نام تابع مشخص است، اما مسیر هر تابع مشخص نیست. برای مشاهده درخت فراخوانی گزارش، به منوی «Current View» در گوشه سمت چپ بالای صفحه بروید و گزینه «Call Tree» را انتخاب کنید. بعد از این کار، فهرست نام توابع، فوراً به تصویر زیر تبدیل میشود.
در این وضعیت وقتی روی یک تابع کلیک میکنید، مسیر و دیدهایی از آنچه در طول اجرای سیستم رخ داده است، به شما نشان داده میشود. با این کار میتوانید علت مشکلات مربوط به عملکرد برنامه را پیدا کنید و ببینید که این مشکلات مربوط به عواملی مثل کد داخلی (native)، کد خارجی (external) یا سناریوهای دیگر میشوند یا خیر.
پروفایل کردن عملکرد با ابزار Prefix
ابزارهای Memory Usage و CPU Usage در Visual Studio برای پروفایل کردنهای اولیهی عملکرد ضروری هستند، اما تنها ابزارهای موجود برای پروفایل نیستند. شما میتوانید ابزارهای عمقیتری پیدا کنید که دادههای دقیقتری را برای عیبیابی عملکرد برنامه در اختیار شما قرار میدهند؛ ابزار Prefixاز جمله این ابزارهای عمقی است که جزو مطمئنترین ابزارهای جانبی توسعهدهنده محسوب میشود.
Prefix یکی از پویاترین ابزارهای تحلیل کد در جهان است. فرآیند profiling با استفاده از Prefix میتواند حتی به باتجربهترین توسعهدهندگان در مواردی مثل بهینهسازی کوئریهای کند SQL، مدیریت استثناهای پنهان و حل تعداد زیادی از مشکلات دیگر مربوط به کد برنامه کمک کند. نکته مثبت دیگر Prefix این است با کدهای زبانهای مختلف برنامه نویسی مثل PHP، NET Core، Python، Node.js، Java و Ruby کار میکند.