С выпуском Visual Studio 16.10 появился новый механизм анализа для профилировщика производительности, при этом .NET Object Allocation Tool (средство выделения объектов .NET) стало первым встроенным инструментом. Это дает инструменту некоторые новые функции и значительное повышение производительности. Попробуйте это в своем приложении C# и посмотрите, какие ложные выделения вы можете удалить, чтобы ускорить работу вашего приложения.
Что нового
В .NET Object Allocation Tool теперь есть поддержка Source Link, которая позволяет инструменту извлекать исходные файлы при переходе к исходнику. Это позволяет вам точно видеть, где происходит выделение, даже если их нет в вашем коде.
![](https://habrastorage.org/getpro/habr/upload_files/95d/c33/4e3/95dc334e3fe72db8b1cfe88bf324426b.gif)
В поиске теперь есть предложения автозаполнения, которые помогут вам быстрее находить и просматривать отчеты.
![](https://habrastorage.org/getpro/habr/upload_files/751/e9f/ff3/751e9fff334cf0b813b8de30413b8c79.gif)
Наконец, мы добавили дополнительную информацию в представление «Коллекции», чтобы попытаться лучше настроить работу .NET Garbage Collector (GC). Теперь вы можете увидеть, почему сработал сборщик мусора, а также соответствующую статистику, например, сколько времени это заняло, размер и сколько объектов было собрано.
![](https://habrastorage.org/getpro/habr/upload_files/6d6/8a3/304/6d68a33047723b8c6dc90a5163d4220f.png)
Немного цифр
Одна из областей, на которую мы потратили больше всего энергии, - это повышение производительности .NET Object Allocation Tool. Для этого мы сосредоточились на двух больших задачах, которые выполняет инструмент:
Построение начальной модели распределения, которая используется для поиска распределения для представлений.
Построение дерева вызовов, которое используется для отображения дерева вызовов, функций и просмотра обратной трассировки.
В таблице ниже вы можете увидеть, что гораздо быстрее этот инструмент находится в последней версии Visual Studio.
Build Allocation Model | Build Call Tree | |
Small trace (500K allocations) | 3.5s -> 2.2s ~1.5x быстрее | 295s -> 24s ~12x быстрее |
Medium trace (1M allocations) | 6.9s -> 3.6s ~2x быстрее | 695 -> 58s ~11x быстрее |
Large trace (3.1M allocations) | 22.5s -> 8.4s ~2.5x быстрее | 1556s -> 109s ~14x быстрее |
Как видите, все значительно быстрее, и эти цифры даже не являются сравнением одного и того же, поскольку новая версия выполняет еще больший анализ, но все же быстрее, чем предыдущая версия!
Это только начало, первый инструмент. Мы распространяем эти изменения на другие инструменты в профилировщике производительности для Visual Studio 2022 и у нас есть дополнительные идеи о том, как мы можем сэкономить еще больше времени. Ожидайте, что ваш опыт профилирования станет намного быстрее!