Facebook RSS Feed
 

.NET Micro Framework: Garbage Collector

-Garbage Collector, işi biten yada ileride erişilmeyecek objeleri temizleyerek hafızada yer açılmasını sağlayan otomatik kaynak yönetim sistemidir. Masaüstü .NET uygulamalarında olduğu gibi, mikrodenetleyici üzerinde de benzer şekilde gereksiz objeler Garbage Collector tarafından temizlenir.

Mikrodenetleyicilerin RAM'leri Kilobyte'lar seviyesinde olduğundan kaynak yönetimi özel bir konum kazanır. Fakat otomatik kaynak yönetimi, yer yer uygulamanın performansının düşmesine ve duruma göre birkaç milisaniyelik gecikmelerin oluşmasına neden olmaktadır. Micro Framework, Garbage Collector'ın istenilen anda çalışmasına imkan vererek uygulamanın kritik noktalarında yaşanacak gecikmeleri önlemektedir.

İstek Üzerine Garbage Collector Kullanımı

Uygulamanızın herhangi bir noktasında Garbage Collector'ı çalıştırmak için "Debug.GC(true);" komutunu yazmanız yeterlidir. Bu noktada Garbage Collector gereksiz objeleri arayıp temizleyecektir. Örnek kullanımı aşağıdaki gibidir:

using System;
using System.Threading;
using Microsoft.SPOT;
 
namespace MFGarbageCollectorKullanimi
{
    public class Program
    {
        public static void Main()
        {
            //Uygulama kodlarınız.
 
            //Garbage Collector'ı istek üzerine çalıştıralım:
            Debug.GC(true);
 
            //Main Thread'i uyutalım.
            Thread.Sleep(Timeout.Infinite);
        }
    }
}

Garbage Collector Debug Mesajları

Uygulamanızın yapısına göre Garbage Collector sıklıkla çalışabilir ve Debug işlemi sırasında Visual Studio'ya satırlarca rapor gönderir. Genellikle faydalı olan bu raporlar, ihtiyaç duyulmadığında gereksiz işlemci kullanımı ve diğer debug mesajlarını okuyamamanız gibi sonuçlar doğurur. Varsayılan olarak açık olan Garbace Collector mesajlarını uygulamanın istediğimiz bölümlerinde açıp kapatmamız mümkündür. Örnek kullanımını inceleyelim:

using System;
using System.Threading;
using Microsoft.SPOT;
 
namespace MFGarbageCollectorKullanimi
{
    public class Program
    {
        public static void Main()
        {
            //Uygulama kodlarınız.
 
            //Garbage Collector mesajlarını kapatalım:
            Debug.EnableGCMessages(false);
 
            //Garbage Collector'ı istek üzerine çalıştıralım:
            Debug.GC(true);
 
            //Main Thread'i uyutalım.
            Thread.Sleep(Timeout.Infinite);
        }
    }
}

"Debug.EnableGCMessages(false)" komutu, Garbage Collector mesajlarının Visual Studio'ya rapor edilmemesini sağladı. Aynı uygulama içerisinde başka bir noktada bu mesajları görmek için "Debug.EnableGCMessages(true)" komutunu kullanabilirsiniz.

Dispose Metodu

Garbage Collector, uygulama dahilindeki tüm gereksiz objelerin temizlenmesinden sorumludur. Tek bir objeyi temizlemek için ise Dispose metodu kullanılır. Örneğin, kullandığınız bir seri port uygulamanın belli bir noktasından sonra gerekmiyorsa Garbage Collector'ın portu kapamasını bekleyemeyiz. Bu işlemin Dispose komutuyla yapılması gerekir. Örnek kod üzerinde görelim:

using System;
using System.Threading;
using System.IO.Ports;
using Microsoft.SPOT;
 
namespace MFGarbageCollectorKullanimi
{
    public class Program
    {
        public static void Main()
        {
            //Bir seri port oluşturalım:
            SerialPort sp1 = new SerialPort("COM1", 115200);
 
            //Seri port üzerinden veri gönderelim:
            sp1.Write(new byte[] { 0, 0, 0 }, 0, 3);
 
            //Seri portu temizleyelim:
            sp1.Dispose();
 
            //Main Thread'i uyutalım.
            Thread.Sleep(Timeout.Infinite);
        }
    }
}

"sp1.Dispose()" komutu ile seri portun kullandığı kaynakları ve pinleri serbest bıraktık. Serbest bıraktığımız pinleri giriş - çıkış gibi başka amaçlar için kullanabiliriz.




 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi