В .NET 10 зафиксирован регресс производительности LINQ вместо ожидаемого улучшения
В новой версии платформы .NET 10 зафиксировано существенное падение производительности метода LINQ First(predicate), несмотря на обещания его улучшения. По данным тестирований, деградация может достигать 31% по сравнению с .NET 9.
Пользователи новой платформы .NET 10 столкнулись с непредвиденным снижением производительности критического метода LINQ First(predicate). Если разработчики заявляли о потенциальном замедлении на уровне до 19% в определенных сценариях, то независимые тесты показывают гораздо более серьёзную деградацию — вплоть до 31% по сравнению с предыдущей версией .NET 9. Этот результат стал неожиданностью для сообщества, так как обычно новые версии фреймворка стремятся к оптимизации.
Проблема была оперативно зафиксирована в репозитории dotnet/runtime, где ей присвоили номер #117717. Команда разработчиков быстро определила причину: она кроется в связке оптимизаций Profile Guided Optimization (PGO) и инлайнинга. В .NET 10 делегат предиката для указанного метода перестал корректно инлайниться, что и привело к падению производительности.
Несмотря на выявленную причину, разработчики приняли решение не исправлять проблему в текущем релизе .NET 10. Они опасаются, что внесение изменений на данном этапе может привести к возникновению новых, более серьёзных багов и нарушению стабильности платформы. Ожидается, что полноценное решение будет реализовано в следующей версии — .NET 11. Тем не менее, была попытка частичного исправления, но она не решила проблему полностью, и баг был переоткрыт как #119425.
Часто задаваемые вопросы
Какая проблема обнаружена в .NET 10?
В новой версии платформы .NET 10 зафиксировано существенное падение производительности критического метода LINQ First(predicate).
Насколько сильно снизилась производительность LINQ в .NET 10?
По данным независимых тестирований, деградация производительности метода LINQ First(predicate) может достигать 31% по сравнению с .NET 9.
Почему метод LINQ First(predicate) стал медленнее в .NET 10?
Проблема вызвана некорректным инлайнингом делегата предиката для метода First(predicate), что связано с особенностями работы оптимизаций Profile Guided Optimization (PGO) и инлайнинга в .NET 10.
Когда будет исправлена проблема с производительностью LINQ в .NET 10?
Разработчики приняли решение не исправлять проблему в текущем релизе .NET 10, опасаясь новых багов. Ожидается, что полноценное решение будет реализовано в следующей версии — .NET 11.
Источник: Habr · Rusability ИИ


Комментарии (0)
Без регистрации. Комментарии проверяются автоматически перед публикацией.
Пока нет комментариев. Будьте первым!