کِوین گوسه، توسعهدهنده در JetBrains، در حال کار بر روی بهبود عملکرد ReSharper است و تمرکز اصلی بر روی دو حوزه پاسخگویی/تاخیر در تایپ و زمان شروع برنامه قرار دارد. هدف این است که ویژگیهای پرکاربرد ReSharper، مانند قابلیتهای ناوبری، در اسرع وقت در دسترس قرار گیرند، در حالی که سایر ویژگیها در پسزمینه بارگذاری میشوند. برای اطمینان از اینکه کاربران میتوانند از Visual Studio با حداقل تداخل از بارگذاری پسزمینه استفاده کنند، اندازهگیری و تعیین مقادیر پاسخگویی رابط کاربری ضروری است.
برای این منظور، ابزاری ایجاد شده است که به طور مداوم زمان لازم برای پردازش ورودیهای معلق توسط رشته اصلی را اندازهگیری میکند. این ابزار با هدف ارائه بازخورد فوری در مورد پاسخگویی IDE در حین استفاده عادی از Visual Studio طراحی شده است. این ابزار از یک لایه (overlay) الهام گرفته از شمارندههای FPS استفاده میکند که در بنچمارک بازیها به کار میروند.
روش اولیهای که برای این کار در نظر گرفته شده، استفاده از ETW (Event Tracing for Windows) است. ارائه دهنده Microsoft-Windows-Win32k دارای پیام UIUnresponsiveness است که زمانی ارسال میشود که پنجره از پمپاژ پیامها متوقف میشود. با استفاده از کتابخانه TraceEvent میتوان یک شنونده (listener) ایجاد کرد. با این حال، دو نکته در این رویکرد وجود داشت که کِوین گوسه از آن راضی نبود. اول اینکه، ویندوز از یک آستانه ثابت برای در نظر گرفتن عدم پاسخگویی یک پنجره استفاده میکند و این آستانه قابل تغییر نیست. به نظر میرسد این آستانه حدود 250 میلیثانیه باشد که برای کِوین گوسه بیش از حد است.
به جای این روش، کِوین گوسه یک پروفایلر سفارشی نوشته است. برای این کار از کتابخانه Silhouette استفاده شده که یک کتابخانه .NET برای نوشتن پروفایلرها در C# است. این کتابخانه با NativeAOT کامپایل شده و به گونهای طراحی شده که به حداقل برسد. پروفایلر از طریق متغیرهای محیطی بارگذاری میشود و برای جلوگیری از تزریق به هر فرآیند فرعی ایجاد شده توسط Visual Studio، کد فیلتر کردن بر اساس نام فرآیند و لغو متغیرهای محیطی اضافه شده است.
مشاهده مطلب اصلی