C# Sınıflar Arası(Class) Veri Aktarımı

Bu konuyu okuyanlar

Ben Kenobi

Müdavim
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
Arkadaşlar benim sorum bunun nasıl yapılacağı değil
Standart olarak yapılan yöntem şu ki veri alacağımız değişkeni public yapıp veri alacağımız sınıfı new anahtar kelimesi ile türetip işlem yapmak.

Benim sorum ise şu.
New ile yeni sınıf türetince bu sınıfa ait değişkenler ve metotlar kullansak da kullanmasak da bellekte yer işgal ediyor mu?
Yani bir tane değişken kullanmak için yüzlerce değişken belleğe gidiyor mu ?

Eğer öyleyse ve ben o sınıfta tek bir değişkenle ilgileniyorsam onu public static yapıp türetmeden alsam daha verimli olur mu ?

Saygılar :)
 

craftingMaterial

Müdavim
Katılım
31 Aralık 2007
Mesajlar
17,485
Reaksiyon puanı
188
Puanları
63
New keyword'ü objenin belleğin heap alanında yeni bir örneğini çıkarmaya yarar, bu da objenin bir kopyasının heap memory'de oluşturması ile olur. Heap alanı da bilindiği üzere stack alanından her zaman daha yavaştır. Açıkçası burada olay işleyeceğiniz veri ile alakalı. Çok yüksek miktarda veri işleyecekseniz struct ile çalışmak daha fazla performans verecektir. Çünkü struct'lar stack alanında çalışırlar. Bir class static olsa bile obje olmasından dolayı heap alanında çalışır. Bu yüzden stack alanında çalışan bir koddan her zaman daha düşük performans verir...
 

Ben Kenobi

Müdavim
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
New keyword'ü objenin belleğin heap alanında yeni bir örneğini çıkarmaya yarar, bu da objenin bir kopyasının heap memory'de oluşturması ile olur. Heap alanı da bilindiği üzere stack alanından her zaman daha yavaştır. Açıkçası burada olay işleyeceğiniz veri ile alakalı. Çok yüksek miktarda veri işleyecekseniz struct ile çalışmak daha fazla performans verecektir. Çünkü struct'lar stack alanında çalışırlar. Bir class static olsa bile obje olmasından dolayı heap alanında çalışır. Bu yüzden stack alanında çalışan bir koddan her zaman daha düşük performans verir...

üstadım dediklerinizi anlamadım. :)
stack ve heap kısmını biliyorum. onu da burada öğrenmiştim. :)
benim anlamadığım şu;
new ile bir obje türetildiğinde o obje içerisinde hiçbirşey kullanmasak bile bellekte yer kaplar mı.
işlemci kullanır onu anlıyorum çünkü heap bellek kullanmasa bile orayı denetler.

peki cevap evet ise diyelim ki ben bu obje içerisinde sadece bir değişkene ulaşmak istiyorum.
bu değişkeni public static olarak tanımlarsam objeyi türetmeden erişebiliyorum.
bu şekilde daha verimli olur mu

Saygılar :)
 

craftingMaterial

Müdavim
Katılım
31 Aralık 2007
Mesajlar
17,485
Reaksiyon puanı
188
Puanları
63
Elbette yer kaplar. Static yapsan bile çok bir şey değişmez. Static yapmak ile singleton design pattern'i arasında çok fazla fark yok aslında. New ile birden fazla obje üretirken static ya da singleton ile tasarlanmış bir class ile tek bir instance üzerinden işini görürsün. Yapacağın iş eğer sadece hesaplama gibi bir şey ise static tanımlaman daha iyi. Çünkü işlemleri kullanmak için bir daha objenin kopyasını yaratmana ihtiyacın olmaz. Ama aynı objeden bir çok kopyaya ve her kopyada farklı işlemlere ve bu sonuçları ayrı birer obje olarak tutmak istersen Normal classlar ile işine devam etmelisin.

Ayrıca standart bir class içerisindeki static bir obje o class'ın tüm instancelarında aynıdır. Örnek vermek gerekirse eğer yarattığın objelere birbirinden bağımsız birer id vereceksen bunların denetimini içerideki bir static field ile halledersin ki tüm objeler bu veriyi bilebilsin.

Olay tamamen nasıl kullanacağın ve ne iş yapacağın ile alakalı...
 

king_julien

Öğrenci
Katılım
8 Mayıs 2012
Mesajlar
19
Reaksiyon puanı
0
Puanları
0
Arkadaşlar benim sorum bunun nasıl yapılacağı değil
Standart olarak yapılan yöntem şu ki veri alacağımız değişkeni public yapıp veri alacağımız sınıfı new anahtar kelimesi ile türetip işlem yapmak.

Benim sorum ise şu.
New ile yeni sınıf türetince bu sınıfa ait değişkenler ve metotlar kullansak da kullanmasak da bellekte yer işgal ediyor mu?
Yani bir tane değişken kullanmak için yüzlerce değişken belleğe gidiyor mu ?

Eğer öyleyse ve ben o sınıfta tek bir değişkenle ilgileniyorsam onu public static yapıp türetmeden alsam daha verimli olur mu ?

Saygılar :)

bir değişken için yüzlerce değişken belleğe gidiyor. işte tam burada ood devereye giriyor. senin kullanacağın birkaç değişken varsa onları ayrı bir classa atarsın sonra yüzlerce değişkeni içeren classını ondan türetirsin. static değişkenlerin adı üstünde static olmaları icap eder. yani sürekli nesnesini türetip kullandığın classların içinde static kullanmak açıkçası çok mantıklı gelmiyor bana. bu arada size katılıyorum bir değişken için bütün nesneyi belleğe atmak tasarımınız iyi olsa dahi bir miktar performans kaybına sebep olacaktır...
 

craftingMaterial

Müdavim
Katılım
31 Aralık 2007
Mesajlar
17,485
Reaksiyon puanı
188
Puanları
63
Zaten bu yüzden dolayı class hiyerarşisini iyi yapmak gerekir. O da tamamen kullanacağınız yapının ihtiyacları ile doğru orantılıdır.
 
Üst