Yazılım Mimarileri ve Tasarım Desenleri Üzerine

SearchValues İle Dizi Arama Performansını Artırma

.NET 9

Merhaba,

Malumunuz iş süreçlerinde belirli işlemler için diziler içerisinde veri aramak oldukça yaygın bir davranış olabilmektedir. Amma velakin bu davranışlar ciddi maliyetlere ve önemli ölçüde performans kayıplarına da yol açabilmektedir. Bu içeriğimizde, bu tarz durumlara karşın uygulama performansını iyileştirmek için tasarlanmış ve .NET 8 ile gelmiş olan SearchValues özelliğini inceliyor olacağız.

SearchValues, büyük veri setleriyle çalışırken hesaplama hızını ve verimliliğini artırmak için kullanılan vektörleştirme(vectorization) tekniğiyle birlikte donanım hızlandırma gibi optimizasyonlar eşliğinde geliştirilmiş olan özel bir sınıftır. Bu sınıf, kendisine verilen ve dizi içerisinde aranacak olan verileri immutable olacak şekilde readonly tutmaktadır.

SearchValues sınıfı aşağıdaki örnekten de görüleceği üzere;

using System.Buffers;

string[] names = ["Şuayip", "Hilmi", "Rıfkı", "Cüneyt", "Raif", "Muiddin", "Hüseyin", "Bekir"];

SearchValues<string> selectedNames = SearchValues.Create(["Şuayip", "Muiddin"], StringComparison.OrdinalIgnoreCase);
var _names = names.Where(t => selectedNames.Contains(t))
                .ToList();

_names.ForEach(name => Console.WriteLine(name));

bir koleksiyon içerisinde birden çok belirli değeri aramanın en hızlı yollarından birini sunmaktadır. .NET 8’de ilk çıktığında yalnızca char ve byte dizilerini desteklerken .NET 9 ile birlikte bu niteliği string dizisini destekleyecek ölçüde genişletilmiştir.

Özellikle LINQ ve EF Core sorgulama süreçlerinde aşağıdaki gibi şartları koleksiyonel değerlendirdiğimiz noktalarda oldukça etkili neticeler vermektedir.

SearchValues<string> _roles = SearchValues.Create(["Admin", "Moderator"], StringComparison.OrdinalIgnoreCase);

var roles = context.Roles.Where(r => _roles.Contains(r.Name))
    .ToList();

Ayrıca ek olarak, yukarıdaki örnekten de anlaşılacağı üzere SearchValues sınıfına System.Buffers namespace’i içerisinden erişim gösterilmektedir.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Exit mobile version