Anasayfa » C#’da Sık Yapılan Hatalar ve Çözümleri

Makaleyi Paylaş

.NET / C# / Yazılım

C#’da Sık Yapılan Hatalar ve Çözümleri

Merhabalar; Bu yazımda C# ile yazılım geliştirirken sık yaptığımız programın çalışmasını engellemese bile performans sorunlarına yol açabilecek hataları ve çözüm yollarını anlatacağım.

LINQ Kullanımı;

Bir program yazarken mutlaka bazı verileri bir list veya collection da saklamamız gerekir ve binlerce kayıt için yenileme yapmak zorunda kalabiliriz.

Örneğin bir Depo stok yönetimi sisteminde 200.000 stok kaydını çektiğimizi düşünün, belirli bir data seti bulmak için yenileme yapmak verimli olmaz, döngü kullanmak yerine .NET’in entegre bir özelliği olan ve nesneleri sorgulamamızı kolaylaştıran LINQ kullanabiliriz.

Verimsiz;

Sponsor
foreach (Stock stock in StockList) {
   if (stock.State == "FL") {
     tax += stock.Balance;
   }
 }

Verimli;

var stocks = (from stock in StockList
where stock.State == "FL"
select stock.Balance).Sum();

Gereksiz “Var” kullanımı;

Bazı durumlarda gelen verinin veya oluşan sonucun ne olduğunu tahmin edemediğimiz için var kullanırız, fakat sonucu biliyorsak veri türünü tanımlamamız gerekir.

Bu kodumuzun okunabilirliğine fayda sağlar, başka bir geliştiricinin kodumuzu daha iyi anlayabilir.

var stocks= (from stock in StockList
where stock.State == "FL"
select stock.Balance).Sum();

Yukarıda ki örnekte sonucun ondalık bir değer olduğunu biliyoruz, bu nedenlede var yerine float tanımlamamız en doğru seçenek olacaktır.

Properties Yerine Public Değişkenlerin Kullanılması;

Bir çok durumda public değişkenleri kullanırız, fakat bazı durumlarda public kullanmamız büyük hatalara neden olacaktır.

public decimal Total {get; protected set;}

Örneğin, sipariş aldığımız bir uygulamada sipariş toplam tutarını tuttuğumuz bir değişkenin belirli bir class ile değiştirilebilmesini isteriz, fakat genel kullanırsak başka bir class herhangi bir engelleme olmadan değişkeni değiştirebilir.

Objelerin Dispose Edilmemesi;

Memory leaks (bellek sızıntıları) uygulamalarda büyük bir sorundur, C# işimiz bittiğinde Dispose yönetimini çağırmanın kolay bir yolunu bize sunar, Using

Inefficient
file.Read(buffer, 0, 100);

Yukarıda ki kodda eğer objeyi Dispose etmezseniz uygulamada Memory leaks oluştururuz, fakat Using kullanarak bunu önleyebiliriz.

Efficient
using (FileStream file = File.OpenRead("numbers.txt")) {
file.Read(buffer, 0, 100);
}

Böylece dosyayı okuruz, ve bittiğinde Dispose ederiz.

Generic TRY-CATCH Kullanımı;

Bir çok yazılımcı genel Exception sınıfını kullanır, tabi bir çok durumda bunu kullanmamız gerekecektir fakat çoğu zaman belirli istisnalar kullanmalıyız

Verimli;

try {
newInteger = int.Parse(astring);
} catch (Exception e) {
// ....
}

Verimsiz;

try {
newInteger = int.Parse(astring);
} catch (NumberFormatException e) {
// ....
}

String Birleştirme

Diğer dillerde yaygın olarak string birleştirmek için + kullanılıyordu, fakat bu birleştirme performans sorunlarına yol açıyordur, Microsoft bunun için StringBuilder’i çıkarttı.

String birleştirmek ve tüm projenizde işlemek istediğiniz de mutlaka StringBuilder’i kullanmalısınız.

 StringBuilder builder = new StringBuilder();
        for (int i = 0; i < 5; i++)
        {
            builder.Append(i).Append(" ");
        }

Makaleyi Paylaş

IT alanında 16 sene önce donanım ile başlayan tecrübem, network ve sonrasında iş analizi, yazılım geliştirme ve proje yöneticiliği alanlarında devam etmiştir. Endüstriyel yazılımlar, sahadan veri toplama ve analizleri, otomatik etiketleme ve barkod sistemleri, otomatik tartım ve robotik konularında tecrübe sahibiyim. Sanayi 4.0 kapsamında imalat sanayinin dijital dönüşümünde çok fazla projenin hayata geçmesini sağladım. Open Source projelerle uzun süre ilgilendim, analiz ve implementasyonu konularında tecrübe edindim. Bunlar dışında hobi amacıyla başlasam da sonradan ürüne dönüşen, geliştirme kartları ile farklı çalışmalarım olmuştur. Raspberry Pi üzerinde yaptığım donanımsal ve yazılımsal işler ile çok farklı ürünler ortaya çıkartarak tecrübe edindim.

Cevap bırakın