.NETYazılım Dilleri

.NET 7 ile Gelecek Yeni Özellikler!

Microsoft’un bir süredir üzerinde çalıştığını söylediği son sürüm .NET 7’in, gelecek yeni özellikleri ve performans iyileştirmeleri için heyecanlı bekleyişimiz devam ediyor.

.NET 7 resmi olarak bu yıl Kasım ayında çıkacak ve .NET 6 mevcut sürümünün yerini alacak.

Kısaca bahsedecek olursak, .NET farklı türde uygulamaları oluşturmaya ve geliştirmeye yönelik bir platform olduğunu söyleyebiliriz.

Platformun en önemli özelliklerinden bir tanesi, platformlar arası açık kaynak koldu olması diyebiliriz. Ayrıca Microsoft, platformu bize ücretsiz sunuyor.

Windows, macOS veya Linux gibi farklı işletim sistemleri için masaüstü uygulamaları, mobil için iOS ve Android uygulamalar hatta, web uygulamalarına, IoT yazılımı ve C# tabanlı oyunlar da oluşturabilirsiniz.

Daha önce konuyla alakalı, tek bir kod tabanından, tek bir projeye sahip olabileceğiniz .NET MAUI‘dan ve .NET Framework uygulama geliştirme platformundan web sitemizde bahsetmiştik.

Oldukça heyecan verici olan son sürümün yeni özelliklerinden biraz bahsedelim.

Şu an .NET 7’nin birkaç ön izlemesi ve test edilme şansı bulunuyor.

  • Microsoft daha önce deneysel Native AOT projesini .NET 7’ye ana hat olarak taşımaya başladıklarını duyurmuştu. Yeni sürümde Ahead-of-time (AOT) dediğimiz, çalışma zamanı yerine derleme zamanda kod üreten araç kullanılacak ve zaten bu amaç için kullanılan ReadyToRun‘dan %73 daha hızlı olacak.

Microsoft, bu özellik ile birlikte .NET 7, başlama zamanı, hafıza kullanımı, disk boyutu ve kısıtlı platformlara erişim alanlarında performans iyileştirmeleri sunuyor.

Hız karşılaştırması.NET 7 Hız karşılaştırması (Kaynak: Microsoft)
Boyut karşılaştırması.NET 7 Boyut karşılaştırması (Kaynak: Microsoft)

Karşılaştırmalar Microsoft üzerinden alınmıştır.

 

  • System.Composition.Hosting

Managed Extensibility Framework güncellemesi ile, yeni API‘ler, kapsayıcıya tek bir nesne örneği eklemenize izin verecek.

Microsoft’un bize verdiği kullanım örneği;

namespace System.Composition.Hosting
{
   public class ContainerConfiguration
   {
      public ContainerConfiguration WithExport<TExport>(TExport exportedInstance);
      public ContainerConfiguration WithExport<TExport>(TExport exportedInstance, string contractName = null,            IDictionary<string, object> metadata = null);

      public ContainerConfiguration WithExport(Type contractType, object exportedInstance);
      public ContainerConfiguration WithExport(Type contractType, object exportedInstance, string contractName = null, IDictionary<string, object> metadata = null);
   }
}

 

  • Kritik Performans Etiketleri

Artık etiket numaralandırma yöntemlerini göstermek mümkün olacak. Bu sayede hız ve performans kayıpları önlenecek ve kritik senaryolar için, hızlı erişim ile nesne numaralandırmaları yapılabilecek.

Microsoft’un bize verdiği kullanım örneği;

vartags=newList<KeyValuePair<string, object?>>()
{
    newKeyValuePair<string, object?>("tag1", "value1"),
    newKeyValuePair<string, object?>("tag2", "value2"),
};

ActivityLinklink=newActivityLink(default, newActivityTagsCollection(tags));

foreach (refreadonlyKeyValuePair<string, object?> taginlink.EnumerateTagObjects())
{
    // Consume the link tags without any extra allocations or value copying.
}            

ActivityEvente=newActivityEvent("SomeEvent", tags: newActivityTagsCollection(tags));

foreach (refreadonlyKeyValuePair<string, object?> tagine.EnumerateTagObjects())
{
    // Consume the event's tags without any extra allocations or value copying.
}


 

  • Yeni API’ler ve İyileştirmeler

System.Text.Json birkaç küçük yaşam kalitesi iyileştirmesi içeriyor.

Bu ekleme sayesinde System.Text.Json, polimorfik tip hiyerarşilerin serileştirilmesi ve seri hale getirilmesi artık mümkün olacak.

Microsoft’un bize verdiği kullanım örneği;

[JsonDerivedType(typeof(Derived))]
public class Base
{
    public int X { get; set; }
}

public class Derived : Base
{
    public int Y { get; set; }
}

 

  • .NET 7 Serileştirme
Base value = new Derived();
JsonSerializer.Serialize<Base>(value); // { "X" : 0, "Y" : 0 }

 

  • .NET 7 Seriyi Kaldırma
Base value = JsonSerializer.Deserialize<Base>(@"{ ""X"" : 0, ""Y"" : 0 }");
value is Derived; // false

 

  • Tarih/Saat Yapılarında Mikrosaniye ve Nanosaniye

Kullanılabilecek en küçük zaman artışı “tik” ve değeri 100nsdi. Bu yüzden ilgili bir değer belirlemek için her şeyi “tik” e dayalı olarak hesaplamamız gerekiyordu.

Artık var olan farklı tarih ve saat yapılarına mikrosaniye ve nanosaniye değerleri eklenecek.

.NET 7 Tarih Saat

namespace System {
    public struct DateTime {
        public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int microsecond);
        public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int microsecond, System.DateTimeKind kind);
        public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int microsecond, System.Globalization.Calendar calendar);
        public int Microsecond { get; }
        public int Nanosecond { get; }
        public DateTime AddMicroseconds(double value);
    }
}

.NET 7 Yalnızca Zaman

namespace System {
    public struct TimeOnly {
        public TimeOnly(int hour, int minute, int second, int millisecond, int microsecond);
        public int Microsecond { get; }
        public int Nanosecond { get; }
    }
}

 

  • Azaltılmış Başlatma Süresi (Write-Xor-Execute)

Microsoft esas olarak performans iyileştirmelerine odaklanmaya karar vermiş durumda. Performansı artırmak için Yeniden Uygulama taslakları ile, başlatma süresinde %10–15’e varan bir iyileşme görülecek.

 

  • Yeni Layoutlar

Şimdiye kadar kullanılan layoutlar hep Xamarin.Forms içerisindeki layoutlardı.

Artık .NET MAUI ile beraber yeni Layout Manager yaklaşımıyla layoutlar yeniden düzenleniyor.

 

  • Code Fixer

Bir Analyzer‘ınız varsa, Kod Düzeltici‘yi kaçıramazsınız.

Varsayılan olarak gelen adı geçersiz kılma olasılığıyla RegexGenerator, kaynak oluşturucu yöntemleri önermekle  sorumlu olacak.

.NET 7’de gelen bu kod düzelticinin ikinci işlevi, yeni yönteme yapılan bir çağrı yoluyla orijinal kodun yerini alacak.

Görüntü Microsoft üzerinden alınmıştır.

 

  • Yazı Tipi Ölçeklendirme

Kullanıcılar cihazlarında metin ölçeklendirme işlemine göre, geliştirmiş olduğunuz uygulamalardaki yazı tipleri ölçeklendirilebilecek.

Özelliği kapatmak için ”Font Auto Scaling Enabled” yani ”Yazı Tipi Ölçeklendirme Etkin” ”False” olarak ayarlamanız yeterli olacak.

 

  • Geliştirilmiş System.Reflection Performansı

Biliyorsunuz System.Reflection, modüllerden, üyelerden, derlemelerden ve daha fazlasını depolanan bilgilerin alınmasını kolaylaştırmak için, türleri meta verilere göre içermekten ve depolamaktan sorumludur.

Bu yenilik ile beraber dinamik olarak basit bir şekilde tipler oluşturabilirsiniz.

.NET 7’de yansıma kullanılarak bir üyeyi çağırırken oluşan ek yük önemli ölçüde azaltıldı.

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Reflection;

namespace ReflectionBenchmarks
{
    internal class Program
    {
        static void Main(string[] args)
        {
            BenchmarkRunner.Run<InvokeTest>();
        }
    }

    public class InvokeTest
    {
        private MethodInfo? _method;
        private object[] _args = new object[1] { 42 };

        [GlobalSetup]
        public void Setup()
        {
            _method = typeof(InvokeTest).GetMethod(nameof(InvokeMe), BindingFlags.Public | BindingFlags.Static)!;
        }

        [Benchmark]
        // *** This went from ~116ns to ~39ns or 3x (66%) faster.***
        public void InvokeSimpleMethod() => _method!.Invoke(obj: null, new object[] { 42 });

        [Benchmark]
        // *** This went from ~106ns to ~26ns or 4x (75%) faster. ***
        public void InvokeSimpleMethodWithCachedArgs() => _method!.Invoke(obj: null, _args);

        public static int InvokeMe(int i) => i;
    }
}

 

.NET 7’nin gelmesine daha birkaç ay varken, yayınlanan ön izlemelerden gördüğümüz kadarıyla birçok performans iyileştirilmesi yapılmış ve heyecanlandığımıza değecek gibi gözüküyor.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu