c# console uygulamasında ram tasarrufu nasıl yapılır?

elessar (65) 11 yıl önce sordu

Merhabalar, c# console da yaptığım programda kullandığım dizilerden ve yapılan işlerden dolayı ram kullanım miktarı çok yükselmektedir. Acaba ram i minimum düzeyde nasıl kullanabilirim.

Toplam 2 cevap


ergin (2539) 11 yıl önce cevapladı

C ve C++ gibi dillerde çokça kullanıldığı gibi C# dilinde de ram tasarrufu yapılabilmektedir. Bunun için Pointer'ları yani işaretçileri kullanırız. C# gibi yüksek seviyeli dilllerde bu özellik tavsiye edilmese de vardır yeri ve zamanı gelince sadece önemli işlerde kullanılması tavsiye edilir.

Pointer nedir?

Pointer değişkenler, bellekte tutulan bir değerin adresini göstermektedirler. Bu konuyu daha iyi anlayabilmek için öncelikle belleğin (RAM’in) yapısını incelemek gerekir. Böylece bellekte bir yer tutma gibi ifadelerin ne anlama geldiğini daha iyi anlamaktayız.

RAM’in Yapısı
Herhangi bir programlama dilinde bir program yazdığımızda ve exe dosyasını çalıştırdığımız zaman, harddiskte kayıtlı olan exe dosyası, çalışabilmek için öncelikle harddiskten daha hızlı olan RAM’e kopyalanır ve RAM – işlemci arasında çalışmasını yapar. Kayıt işlemlerinde ise harddiske yazma komutuyla işlem yapılır.

Programımız çalıştığı zaman bellekte onun için belirli bir alan ayrılmamıştır. İşlemci, dosyayı RAM içerisine rastgele yerleştirir ve adres bilgilerini kaydeder. Programımızın istenen noktasına ulaşması gerektiğinde adrese gidip o veriyi kullanabilmektedir.

Bilgisayar sistemlerinin bu kadar gelişmediği dönemlerde bellek yönetimi çok önemli bir konuydu. Büyük çaplı bir yazılım hazırlandığında belleğin dolma ihtimali olduğundan değişkenler kullanıldığı oranda bellekte tutulur, fonksiyonlar arasında değişken göndermesi sırasında değişkenin bir kopyası değil, adres bilgisi gönderilirdi.

Adres bilgisini kısaca açıklamak gerekirse;

Yazılımımız içerisinde her değişken değerini bir kutucuğa yerleştirdiğimizi düşünürsek. Bu değişkenlerin değerlerine ulaşabilmek için onların adres bilgilerine ihtiyacımız olacaktır.

C#’ta pointer kullanabilmek için öncelikle Visual Studio’da unsafe kodlamaya izin vermemiz
gerekmektedir. Bunun için; Projemizin Properties seçeneğinde Build sekmesinde bulunan Allow unsafe code seçeneğini aktif etmemiz gerekmektedir. Bu işlemin ardından pointer tanımlayabiliriz.

private pointer-ornegi void button1_Click(object sender, EventArgs e)
{
   int sayi = 123456;
   int* pointer-degisken = &sayi;
   Console.WriteLine((*pointer-degisken).ToString());
}

sayi  isimli Integer türünden bir değişken oluşturduk ve 123456 değerini atadık. pointer-degisken isminde Integer türünde bir pointer değişken oluşturduk ve sayi değişkeninin adresini atadık. Bu adresi ekranda yazdırdık.

Pointer değişkenlerinin tanımlanma kuralları şunlardır;

  • Pointer değişkenler * ile tanımlanır : int* deger
  • & : Pointer olmayan bir değişkenin adres bilgisini verir: &sayi
  • Pointer değişkendeki adres bilgisini alabilmek için değişken adını kullanmalıyız: deger = &sayi

 

 

alattin (17125) 11 yıl önce cevapladı

Pointer kullanmak özellikle Array işlemlerinde ciddi performans avantajı sağlar. Kodunuzu yönetilebilir kod olmaktan çıkartacak böylelike yönetilebilir kodun getirdiği, ilave kontrol mekanizmalarından uzaklaşmış olacaksınız. 

Ayrıca C# kodunuzun performansını arttırmak için 5 ipucu inceleyebilirsiniz.