Generowanie kodu na urządzeniach przenośnych zmienia się z Mono na CoreCLR

Aplikacje mobilne platformy .NET 11 mogą używać JIT CoreCLR, ReadyToRun (R2R) i interpretera CoreCLR. Dostępne tryby nadal zależą od konfiguracji docelowej i kompilacji.

Wersja wprowadzona

.NET 11

Poprzednie zachowanie

Aplikacje mobilne platformy .NET 10 mogą używać kompilacji JIT Mono, kompilacji AOT Mono, kompilacji AOT Mono z LLVM oraz interpretera Mono. Dostępne tryby zależały od celu docelowego i konfiguracji kompilacji.

Niektóre aplikacje używały interpretera Mono tylko dla wybranej listy asemblacji. Pomogło to tym aplikacjom zrównoważyć zgodność i szybkość.

Nowe zachowanie

Aplikacje mobilne platformy .NET 11 mogą używać JIT CoreCLR, ReadyToRun (R2R) i interpretera CoreCLR. Dostępne tryby nadal zależą od celu i konfiguracji kompilacji.

R2R to technologia AOT, ale nie jest nową nazwą mono AOT. Przechowuje on IL i metadane w aplikacji i może używać JIT lub interpretera, gdy platforma docelowa na to zezwala.

Kompilacje wydania dla Androida używają CoreCLR R2R do wstępnego kompilowania części aplikacji i trybu JIT dla reszty. MauiEnableFullReadyToRun=true stosuje R2R w całej aplikacji. Aplikacja może nadal używać trybu JIT w czasie wykonywania, aby zapewnić dynamiczne zachowanie. Kompilacje debugowe używają mniej R2R, więc większość aplikacji jest uruchamiana przy użyciu trybu JIT.

Kompilacje wydaniowe Apple kompilują wstępnie całą aplikację z użyciem R2R i mogą używać interpretera w czasie wykonywania w celu obsługi dynamicznego działania. Kompilacje debug używają mniej R2R, więc większość aplikacji działa z interpreterem.

NativeAOT to kolejna opcja generowania kodu na platformach mobilnych. Różni się on zarówno od mono AOT, jak i CoreCLR R2R. Android NativeAOT jest eksperymentalny w .NET 11.

Typ zmiany przełamującej

Ta zmiana może mieć wpływ na zgodność ze źródłem i zachowanie.

Przyczyna zmiany

CoreCLR używa własnego kompilatora i modelu wykonywania. Ustawienia Mono AOT nie wpływają na CoreCLR R2R.

  • Użyj wartości domyślnych R2R z obciążenia mobilnego.
  • Nie próbuj tłumaczyć każdego ustawienia AOT mono na ustawienie R2R.
  • Użyj MauiEnableFullReadyToRun tylko po zmierzeniu aplikacji.
  • Mierz czas uruchamiania, szybkość, użycie pamięci i rozmiar aplikacji.
  • Jeśli rozważasz rozwiązanie NativeAOT, zapoznaj się z wskazówkami dotyczącymi wdrażania Native AOT dla platformy .NET MAUI, ponieważ jest to oddzielny model wdrażania z różnymi ograniczeniami. Traktuj system Android NativeAOT jako eksperymentalny w .NET 11.

Interfejsy API, których dotyczy problem

Nie są usuwane żadne zarządzane interfejsy API. Następujące właściwości i elementy programu MSBuild nie zapewniają już efektu generowania kodu Mono, gdy aplikacja używa coreCLR:

  • Android:RunAOTCompilation, EnableLLVM, AndroidEnableProfiledAot, AndroidAotAdditionalArguments, AndroidExtraAotOptions, AndroidAotMode, AotAssemblies, AndroidAotEnableLazyLoad, AndroidUseInterpreter, @(AndroidAotProfile), UseInterpreter i AndroidEnableMarshalMethods.
  • iOS, tvOS i Mac Catalyst:UseInterpreter, MtouchInterpreter, MtouchUseLlvm, MtouchFloat32MonoUseCompressedInterfaceBitmap, RunAotCompilation, AotAssemblies, i AotCompileMaxDegreeOfParallelism.

Te ustawienia umożliwiają skonfigurowanie kompilacji mono AOT, LLVM, wyboru interpretera, danych wejściowych AOT lub wygenerowanych metod marshalingu. Nie konfigurują potoku CoreCLR ReadyToRun. Aby uzyskać szczegółowe informacje na temat zachowania migracji i diagnostyki kompilacji, zobacz Właściwości projektu Mono nie konfigurują już aplikacji mobilnych.