কম্পিউটার টিউটোরিয়াল

C#-এ লিস্টের সাইজ (Capacity vs Count) বের করা

C#-এ `List<T>`-এর দুটি গুরুত্বপূর্ণ প্রপার্টি রয়েছে: Count (বর্তমান উপাদান সংখ্যা) এবং Capacity (অ্যালোকেটেড মেমরি ক্যাপাসিটি)।beginners প্রায় এই দুটো গুলিয়ে ফেলে।

Count vs Capacity - মূল পার্থক্য

প্রপার্টিঅর্থবদলায় কবে
Countলিস্টে বর্তমানে কতটি উপাদান আছে`Add`, `Remove`, `Clear` কল করলে
Capacityঅन्तর্নিহিত অ্যারে কতটি উপাদান ধারণ করতে পারে (রিসাইজ ছাড়া)অটোমেটিক্যালি ডাবল হয় যখন `Count > Capacity`

উদাহরণ: Count vs Capacity ডেমো


using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        var list = new List<int>();
        
        Console.WriteLine($"শুরু: Count={list.Count}, Capacity={list.Capacity}");
        
        // উপাদান যোগ করুন
        for (int i = 1; i <= 10; i++)
        {
            list.Add(i * 10);
            Console.WriteLine($"Add({i*10}): Count={list.Count}, Capacity={list.Capacity}");
        }
        
        Console.WriteLine($"\nফাইনাল: Count={list.Count}, Capacity={list.Capacity}");
        
        // ক্যাপাসিটি ম্যানুয়ালি সেট করা
        list.Capacity = 20;
        Console.WriteLine($"Capacity=20 সেট করার পর: Count={list.Count}, Capacity={list.Capacity}");
        
        // TrimExcess - অপরিশিষ্ট ক্যাপাসিটি ফাঁকা করুন
        list.TrimExcess();
        Console.WriteLine($"TrimExcess(): Count={list.Count}, Capacity={list.Capacity}");
    }
}

আউটপুট


শুরু: Count=0, Capacity=0
Add(10): Count=1, Capacity=4
Add(20): Count=2, Capacity=4
Add(30): Count=3, Capacity=4
Add(40): Count=4, Capacity=4
Add(50): Count=5, Capacity=8
Add(60): Count=6, Capacity=8
Add(70): Count=7, Capacity=8
Add(80): Count=8, Capacity=8
Add(90): Count=9, Capacity=16
Add(100): Count=10, Capacity=16

ফাইনাল: Count=10, Capacity=16

Capacity=20 সেট করার পর: Count=10, Capacity=20
TrimExcess(): Count=10, Capacity=10

Capacity কীভাবে বেড়ে (Growth Strategy)

  • শুরু: 0
  • প্রথম Add: 4
  • পূর্ণ হলে: ডাবল হয় (4→8→16→32→64...)
  • এটি অ্যামোর্টাইজড O(1) ইনসারশন নিশ্চিত করে

প্রি-অ্যালোকেশন (Performance Optimization)

যদি আনুমানিক সাইজ জানা থাকে, ক্যাপাসিটি প্রথমেই সেট করুন রি-অ্যালোকেশন এড়াতে:


// খারাপ: বারবার রি-অ্যালোকেশন
var list1 = new List<int>();
for (int i = 0; i < 10000; i++) list1.Add(i);

// ভালো: একবারে অ্যালোকেট
var list2 = new List<int>(10000);
for (int i = 0; i < 10000; i++) list2.Add(i);

// আরও ভালো: Collection Expression (C# 12+)
var list3 = new List<int>(10000) { 1, 2, 3 }; //Capacity 10000, Count 3

সাধারণ ভুল: Capacity কে Size মনে করা


// ভুল - Capacity দেখাচ্ছে, আসল সাইজ নয়
Console.WriteLine("Size: " + list.Capacity); // ভুল!

// সঠিক - Count ব্যবহার করুন
Console.WriteLine("Size: " + list.Count);    // সঠিক!

Array vs List - সাইজ পাওয়া


// Array
int[] arr = new int[10];
int arrSize = arr.Length; // ফিক্সড

// List
var list = new List<int>();
int listSize = list.Count; // ডাইনামিক

সারসংক্ষেপ

  • আসল সাইজ (উপাদান সংখ্যা): `list.Count`
  • অ্যালোকেটেড ক্যাপাসিটি: `list.Capacity`
  • পূর্বে ক্যাপাসিটি সেট করুন পারফরম্যান্সের জন্য (`new List<T>(expectedSize)`)
  • মেমরি অপ্টিমাইজ: `list.TrimExcess()` কল করুন বড় লিস্ট প্রসেসিংয়ের পর
  1. HTML-এ localStorage-এর আকার কীভাবে জানবেন?

  2. Android-এ ArrayBlockingQueue-র আকার জানার পদ্ধতি

  3. পাইথনে লিস্টের আকার (সাইজ) জানার পদ্ধতি

  4. পাইথন লিস্টে একটি উপাদানের ইনডেক্স খুঁজে বের করার পদ্ধতি