День 2134. #ЧтоНовенького
Значительное Ускорение Восстановления NuGet-Пакетов в .NET 9
В .NET 9 добавлен новый сопоставитель зависимостей NuGet, созданный для значительного повышения производительности. Если вы боролись с медленным восстановлением пакетов в сложных сборках, это решение, которого вы ждали.
Внутри Microsoft большой репозиторий содержит тысячи проектов на .NET Core. Это непростая задача, в настоящее время более 2500 отдельных проектов перенесены и оптимизированы для современных стандартов. Восстановление NuGet-пакетов занимало более 30 минут, что приводило к значительным задержкам в сотнях сборок каждый день. Эти задержки быстро накапливались, что приводило к потере времени и разочарованию разработчиков.
Переосмысление разрешения пакетов
Старый алгоритм разрешения зависимостей NuGet начинался как временное решение; доказывая, что, как сказал Милтон Фридман, «Ничто не является столь постоянным, как временное решение, которое работает». Хотя он долгое время служил своей цели, он не был разработан для обработки масштаба и сложности больших репозиториев. Первоначальный сопоставитель зависимостей создавал огромный граф с миллионами узлов, представляющих все возможные отношения между зависимостями. Этот подход просто не был масштабируемым; он требовал огромных объёмов памяти и вычислительной мощности, и по мере роста проектов росли время и усилия, необходимые для разрешения графов.
Было ясно, что необходим новый подход, поэтому специальная группа инженеров решила начать с нуля. Их цель была амбициозной: создать более простую и эффективную утилиту, которая будет выдавать те же результаты, но за гораздо меньшее время. Новый алгоритм, который они разработали, использует более рационализированный подход, представляя граф как сглаженный набор, где каждый узел создаётся только один раз. Это делает граф зависимостей в памяти намного меньше и с ним проще работать. Конфликты разрешаются по мере построения графа, что позволяет избежать необходимости в повторяющихся проходах, которые требовал старый алгоритм разрешения графа зависимостей.
Результаты
Новый подход дал впечатляющие результаты. Исходный граф зависимостей, который создал бы 1,6 миллиона узлов для сложного проекта, был сокращён до всего 1200 узлов. Благодаря меньшему количеству узлов для обработки время восстановления значительно сократилось: до всего 2 минут.
Новый алгоритм разрешения графа зависимостей добавлен в .NET 9 и включен по умолчанию. Это означает, что при обновлении до .NET 9 вы автоматически получите преимущества более быстрого времени восстановления — не требуется дополнительная настройка, не требуется изменение конфигурации. Просто обновитесь, и вы сразу увидите разницу.
Источник: https://devblogs.microsoft.com/dotnet/dotnet-9-nuget-resolver/
Post #2581
2.49K
- 👍 22