Garbage collector:
গার্বেজ কালেক্টর যেসব অবজেক্ট বা ইন্সট্যান্স এর দরকার নেই তাদের খোঁজ করে এবং তারা ডেসট্রয় হওয়ার জন্য রেডি আছে হিসেবে ট্রিট করে। এরপর এটি ডিস্ট্রাক্টর কল করে মেমোরি রিলিজ করে।
using System; public class MyClass { private int[] data; public MyClass(int size) { data = new int[size]; Console.WriteLine(“MyClass instance created”); } ~MyClass() { Console.WriteLine(“Destructor (finalizer) called for MyClass”); } } public class MainClass { public static void Main(string[] args) { // Create an instance of MyClass MyClass myObj = new MyClass(1000000); // Let’s pretend we do something with myObj // The destructor (~MyClass) will be automatically called when myObj is no longer in use // It’s not necessary to explicitly call the destructor in C# // Force garbage collection to demonstrate the finalizer being called GC.Collect(); } }
Output:
MyClass instance created
Link: https://dotnetfiddle.net/mSQjoZ
উপরের উদাহরণে MyClass ক্লাসের অবজেক্ট myObj যখন তৈরি হয় তখন কনস্ট্রাক্টর কল হয়। এরপর যখন মাই অবজেক্টের স্কোপ শেষ হয় তখন অটোমেটিক্যালি ডেসট্রাক্টর কল হয়। এরপর GC.collect() এর মাধ্যমে ফোর্স গার্বেজ কালেকশন করা হয়েছে।
Garbage Collector দুই ভাবে মেমোরি ক্লিন করে :
- ডেস্ট্রাক্টর ব্যবহার করে, যা আমরা উপরের উদাহরণে দেখেছি
- IDisposable ইন্টার ফেস ব্যবহার করে
IDisposable:
using System; public class Resource : IDisposable { private bool disposed = false; public void DoSomething() { if (disposed) throw new ObjectDisposedException(“Resource”); Console.WriteLine(“Resource is being used.”); } // Implement IDisposable. public void Dispose() { Dispose(true); } protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { // Release managed resources. Console.WriteLine(“Disposing managed resources.”); } // Release unmanaged resources. Console.WriteLine(“Disposing unmanaged resources.”); disposed = true; } } // Finalizer ~Resource() { Dispose(false); Console.WriteLine(“Finalizer (destructor) called for Resource.”); } } public class MainClass { public static void Main(string[] args) { using (Resource resource = new Resource()) { resource.DoSomething(); } } }
Output:
//Output (আউটপুট) Resource is being used. Disposing managed resources. Disposing unmanaged resources.
উপরের উদাহরণে IDisposable কে ইমপ্লিমেন্ট করেছে Resource। ডিসপোজ মেথড ব্যবহার করে ম্যানেজড এবং আন ম্যানেজ দুই ধরনের রিসোর্স রিলিজ করা হয়েছে। এখানে ইউসিং স্টেটমেন্ট ব্যবহার করে ডিসপোজ মেথড কল করা হয়েছে যা কোন এক্সেপশন হলেও ডিসপোজ মেথড কল হওয়া নিশ্চিত করে।
যা শিখলাম
- OOP কি
- বাস্তব জীবনে ক্লাস এবং অবজেক্ট কি
- OOP তে ক্লাস এবং অবজেক্ট কি
- ক্লাস এবং অবজেক্টের ব্যবহার
- ফিল্ড এবং মেথড কি
- ফিল্ড এবং মেথডের ব্যবহার
- এক্সেস মডিফায়ার কি
- এক্সেস মডিফায়ার কেন ব্যবহার করব
- প্রাইভেট, পাবলিক, প্রটেক্টেড কি ওয়ার্ডের ব্যবহার
- ডিফল্ট এক্সেস মডিফায়ার কি
- নন-এক্সেস মডিফায়ার কি
- ইন্টার্নাল কি-ওয়ার্ড কি
- দিস, ফাইনাল এবঞ স্ট্যাটিক কি-ওয়ার্ডের ব্যবহার
- OOP-র প্রয়োজনীয়তা
- কনস্ট্রাক্টর কেন ব্যবহার করব
- ডিফল্ট কনস্ট্রাকটার কি
- প্যারামিটারাইজড কনস্ট্রাক্টরের ব্যবহার
- কনস্ট্রাক্টর ওভারলোডিং এর সুবিধা
- সুপার বা বেজ কনস্ট্রাক্টরের কাজ
- প্রাইভেট কনস্ট্রাক্টর এর ব্যবহার
- প্যারামিটারাইজড বেস কনস্ট্রাক্টর এর ব্যবহার
- ডেস্ট্রাক্টর কি
- কিভাবে গার্বেজ কালেকশন হয়