.NET 7 yolda! Aklınızı başınızdan alacak 5 özellik

Paylaş :

Microsoft'un bir Kod Çözümleyici ve Kod Düzeltici eklediğini biliyor muydunuz?

.NET 7 yolda! Aklınızı başınızdan alacak 5 özellik

Microsoft'un bir süredir .NET 7 üzerinde çalıştığı bir sır değil ve ne zaman birileri soru sorsa, şirket hala geliştirme aşamasında olduğunu ve zamanı geldiğinde daha fazla bilgi alacağımızı belirtti.

Öyleyse tahmin et? Doğru zaman! Kısa süre önce Microsoft, .NET 7'nin bu yıl Kasım ayında resmi olarak piyasaya sürüleceğini duyurdu ve birçok yeni özelliğini ortaya çıkardı. Oldukça heyecan verici olduklarını söylemeye gerek yok! Şimdi neden bu kadar çok insanın .NET 7'nin geleceği konusunda heyecanlandığına bir göz atalım.

Kritik Performans Etiketleri

Microsoft bize artık etiket numaralandırıcı yöntemlerini göstermenin mümkün olduğunu söylüyor . Bu, özellikle performansın hayati önem taşıdığı ve artık ve kullanılarak elde edilebileceği kritik senaryolar için ActivityEventtasarlanmıştır ActivityLink.

Bu, Microsoft'un bize verdiği bir kullanım örneğidir :




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.

}



Bu sayede hız veya performans kaybı olmadan ve elemanlara kolay ve hızlı erişim ile nesne numaralandırmaları yapılabilmektedir .

Ayrıca, bu önerinin yazarı Mikel Blanchard , bu yeni özelliğin performansı katlanarak artırdığını ve dolayısıyla hata süresini azalttığını açıkça gösterdiği 3 senaryoyu karşılaştırarak ekliyor .

Her şeyden önce Mikel, numaralandırmanın bu API'yi kullanarak numaralandırmanın Enumerate* API'sini kullanmaktan çok daha zor olduğunu açıklıyor:

public IEnumerable<KeyValuePair<string, object?>>? Tags { get; } 

Ve sonuçlar şöyleydi:


Bir sonraki testte, performansı %71 oranında artırdı ( “ aynı zamanda çok yavaş ” olduğunu düşünmesine rağmen ).

Bu durumda ile gerçekleştirildi:

Bundan sonra, aynı testi yapmaya karar verdi, ancak bir dizi üzerinde numaralandırdı:



private struct Enumerator
{

         private readonly KeyValuePair<string, object>[] source;

            private int index;



            public Enumerator(KeyValuePair<string, object>[] source)

            {

                this.source = source;

                this.index = -1;

            }



            public readonly KeyValuePair<string, object> Current => this.source[this.index];



            public readonly Enumerator GetEnumerator() => this;



            public bool MoveNext()

            {

                return ++this.index < this.source.Length;

            }

        }


Ve sonuç,  önceden gerçekleştirilen önceki teste kıyasla %83 daha fazla performanstı :

System.Text.Json iyileştirmeleri

Önceki sürümlerde bu mümkün değildi, ancak 'ye yapılan bu eklemeler sayesinde System.Text.Json, polimorfik tip hiyerarşilerin serileştirilmesi ve seri hale getirilmesi artık mümkün.

Microsoft örneğine bakalım :




public class Base[JsonDerivedType(typeof(Derived))]

{

    public int X { get; set; }

}



public class Derived : Base

{

    public int Y { get; set; }

}
seri hale getirme:
Base value = new Derived();

JsonSerializer.Serialize<Base>(value); // { "X" : 0, "Y" : 0 }
Seri durumdan çıkarma:

Bu durumda Eirik Tsarpalis , teklifinde polimorfik seri kaldırmayı sağlamak için bir tür ayrımcısının belirtilmesi gerektiğini belirtir. Bunu şu şekilde gösteriyor:

Serileştirme ve seri durumdan çıkarma hakkında daha fazla bilgi almak istiyorsanız, orijinal teklife bir göz atmanızı tavsiye ederim: Dotnet Sayı: #63747CopyString UTF-8 ve UTF-16


Artık kodu çözülmüş JSON dizelerini tüketebilmek için yeni yöntemler dahil edilmiştir. Önceden bu yalnızca kullanarak mümkündü, Utf8JsonReader.GetString()ancak şimdi UTF-8 dizelerini ve hatta UTF-16 dizelerini kod çözmeden CopyStringkopyalayabilirsiniz .

Microsoft bu örneği bırakır :

analizör

Artık yeni bir analizörümüz var. Bu analiz cihazı, RegexGenerator kaynak üretecinin Regex kullanımı için dönüştürme olasılığı olan kullanımları araştırmaktan sorumludur:


Microsoft'a göre , jeneratör çıktısı sağlanan parametrelerin bilinen değerlerine bağlıdır:

"Bunlar, .NET 7'yi hedefleyen bir uygulamanın parçası. Yeni çözümleyici, .NET 7 hedefleme paketi içinde gelir ve yalnızca .NET 7'yi hedefleyen uygulamalar bu çözümleyici için uygundur.
LangVersion 10'dan yüksek. Şu an için normal ifade kaynak oluşturucu, LangVersion'ın önizlemeye ayarlanmasını gerektiriyor."

Kod düzeltici

Elbette, bir Analyzer'ınız varsa, Code Fixer'ı kaçıramazsınız . İşte burada, Microsoft bize iki işlevinden ilkinin (şimdilik, daha fazla haber beklemeye devam edelim) varsayılan olarak gelen adı geçersiz kılma olasılığıyla RegexGenerator kaynak oluşturucu yöntemleri önermekten sorumlu olduğunu söylüyor.

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

Microsoft örneğinde kod düzelticinin nasıl göründüğüne bakalım:


Microsoft tarafından .NET 7'nin resmi olarak yayınlanmasına daha birkaç ay var ama daha önce piyasaya sürülen tüm önizlemeler ( bu sonuncusu ile birlikte ) bana çok iyi ve oldukça büyük bir performansla göründü. odak. Microsoft'un sırada ne olduğunu görmek için sadece bekleyebiliriz.

Hesabınızı yönetmek için giriş yapın

veya