Etiketler

, ,


Boxing ve Unboxing Tasarımı

Performans ile ilgili konulardan bahsederken “Boxing” ve “Unboxing” e değinmemek olmaz. Bu iki kavram beklide proje genelinde en çok kullanılan işlemdir. Her bir nesnenin başka bir nesneye çevrimi (convert – cast) esnasında bellek üzere bu işlemler gerçekleşir. Yüzeysel olarak örneklemek gerekirse, herhangi bir “object” a atığınız bir değeri daha sonra kendi tipine çevirmek istediğiniz farkında olmadan kullanırsınız ya da “string” bir değişkene atadığını bir sayıyı “integer” a geri çevirmek istediğinizde kullanırsınız.

Bu iki kavramdan söz aralarından bahsettiğim bir Generic Collections (Genel Koleksiyonalar) adlı yazımı okumanızı öneririm.

“Boxing” ve “Unboxing” kullanımına ilişkin olarak vereceğim ilk öneri, gereksiz yere bu işlemleri gerçekleştirmemenizdir. Bu işlemler sizin direk müdahalenizle olmada da kullanımınıza bağlı olarak dolaylı yoldan arka planda gerçekleşecektir. “Generic” kavramıyla tanıştıysanız (.Net Framework 2.0 ile beraber) , generic leri kullanmaya özen gösteriniz. Çünkü generic ler sizi bu işlemelerden korur.

“Boxing” in getirdiği aşırı yükün farkında olun ve kodlarınızda eğer bir alt türüne dönüştürme (down-casting) yapacaksanız, bu işi direk destekleyen operatörler kullanın. Vb.net için “DirectCast” bu iş hazırlanmıştır. Casting ile ilgili daha önce yazmış olduğum “VB.NET de Casting / DirectCast vs Ctype” adlı yazım size bu dönüşümlerim performansı ne kadar etkilediği ve hangi operatörün ne kadar performanslı olduğu konusunda bilgi verecektir.

Özetle,

  • Boxing” ve “Unboxing” kullanımından kaçının
  • Boxing” in getirdiği aşırı yükün farkında olun
  • Vb.net için  “DirectCast” operatörünü  “Ctype” operatörüne tercih edin.