Mobilde kod oluşturma Mono'dan CoreCLR'ye değişiyor

.NET 11 mobil uygulaması CoreCLR JIT, ReadyToRun (R2R) ve CoreCLR yorumlayıcısını kullanabilir. Kullanılabilir modlar yine de hedefe ve derleme yapılandırmasına bağlıdır.

Sürüm kullanıma sunulmuştur

.NET 11

Önceki davranış

.NET 10 mobil uygulama Mono JIT, Mono AOT, LLVM ile Mono AOT ve Mono yorumlayıcıyı kullanabilir. Kullanılabilir modlar hedefe ve derleme yapılandırmasına bağlıydı.

Bazı uygulamalar Mono yorumlayıcısını yalnızca belirli bir derleme listesi için kullandı. Bu, bu uygulamaların uyumluluk ve hızı dengelemelerine yardımcı oldu.

Yeni davranış

.NET 11 mobil uygulaması CoreCLR JIT, ReadyToRun (R2R) ve CoreCLR yorumlayıcısını kullanabilir. Kullanılabilir modlar yine de hedefe ve derleme yapılandırmasına bağlıdır.

R2R bir AOT teknolojisidir ancak Mono AOT için yeni bir ad değildir. Uygulamada IL ve meta verileri tutar ve hedef izin verdiğinde JIT veya yorumlayıcıyı kullanabilir.

Android Release derlemeleri, uygulamanın bir bölümünü önceden derlemek için CoreCLR R2R kullanır ve geri kalanlar için JIT'yi kullanır. MauiEnableFullReadyToRun=true R2R'yi uygulamanın tamamına uygular. Uygulama, dinamik davranış için çalışma zamanında JIT'yi kullanmaya devam edebilir. Hata ayıklama derlemeleri daha az R2R kullandığından, uygulamanın çoğu JIT ile çalışır.

Apple Release derlemeleri, tüm uygulamayı R2R ile önceden derler ve dinamik davranış için çalışma zamanında yorumlayıcıyı kullanabilir. Hata ayıklama derlemeleri daha az R2R kullandığından, uygulamanın çoğu yorumlayıcıyla çalışır.

NativeAOT , mobil platformlardaki bir diğer kod oluşturma seçeneğidir. Hem Mono AOT hem de CoreCLR R2R'den farklıdır. Android NativeAOT, .NET 11'de deneyseldir.

Kesinti yaratan değişiklik türü

Bu değişiklik kaynak uyumluluğunu ve davranışını etkileyebilir.

Değişiklik nedeni

CoreCLR kendi derleyicisini ve yürütme modelini kullanır. Mono AOT ayarları CoreCLR R2R'i denetlemez.

  • Mobil iş yükünden R2R varsayılanlarını kullanın.
  • Her bir Mono AOT ayarını R2R ayarına çevirmeye çalışmayın.
  • Yalnızca uygulamayı ölçtükten sonra kullanın MauiEnableFullReadyToRun .
  • Başlangıç süresini, hızını, bellek kullanımını ve uygulama boyutunu ölçün.
  • NativeAOT kullanmayı düşünüyorsanız, farklı kısıtlamalara sahip ayrı bir dağıtım modeli olduğundan .NET MAUI Yerel AOT dağıtım kılavuzunu gözden geçirin. .NET 11'de Android NativeAOT'u deneysel olarak değerlendirin.

Etkilenen API'ler

Hiçbir yönetilen kod API'si kaldırılmaz. Aşağıdaki MSBuild özellikleri ve öğeleri artık uygulama CoreCLR kullandığında Mono kod oluşturma etkisini sağlamaz:

  • Android:RunAOTCompilation, AotAssemblies, EnableLLVM, AndroidEnableProfiledAot, , AndroidAotMode, AndroidAotAdditionalArguments, AndroidExtraAotOptions, @(AndroidAotProfile), AndroidAotEnableLazyLoad, UseInterpreterAndroidUseInterpreterve AndroidEnableMarshalMethods.
  • iOS, tvOS ve Mac Catalyst:UseInterpreter, MtouchInterpreter, MtouchUseLlvm, MtouchFloat32, MonoUseCompressedInterfaceBitmap, RunAotCompilation, AotAssembliesve AotCompileMaxDegreeOfParallelism.

Bu ayarlar Mono AOT derlemesi, LLVM, yorumlayıcı seçimi, AOT girişleri veya oluşturulan marshal yöntemlerini yapılandırıyor. Onlar CoreCLR ReadyToRun işlem hattını yapılandırmaz. Ayrıntılı geçiş ve derleme tanılama davranışı için bkz. Mono proje özellikleri artık mobil uygulamaları yapılandırmaz.