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

C#-তে SortedList-এ ক্যাপাসিটি আকারে আনা (TrimToSize)

SortedList.Capacity vs Count

  • Count: বর্তমানে কতগুলো কী-ভ্যালু পেয়ার আছে
  • Capacity: ইন্টারনাল অ্যারে কতগুলো এলিমেন্ট ধারণ করতে পারে (অ্যালোকেটেড মেমরি)
  • Capacity >= Count সবসময়। ডিফল্টভাবে ক্যাপাসিটি ২ের গুণিতকে বৃদ্ধি পায় (4, 8, 16, 32...)

TrimToSize() মেথড

ক্যাপাসিটিকে বর্তমান Count এর সমান করে দেয় — অপচয় মেমরি রিলিজ করে।

উদাহরণ ১


using System;
using System.Collections;

public class Demo {
    public static void Main() {
        SortedList sortedList = new SortedList();
        
        // ১০টি আইটেম যোগ
        for (int i = 1; i <= 10; i++) {
            sortedList.Add(i.ToString(), (i * 10).ToString());
        }
        
        Console.WriteLine($"Count: {sortedList.Count}");       // 10
        Console.WriteLine($"Capacity: {sortedList.Capacity}"); // 16 (next power of 2)
        
        // TrimToSize কল
        sortedList.TrimToSize();
        
        Console.WriteLine($"Capacity (after Trim): {sortedList.Capacity}"); // 10
    }
}

আউটপুট:

Count: 10
Capacity: 16
Capacity (after Trim): 10

উদাহরণ ২: একাধিক SortedList তুলনা


using System;
using System.Collections;

public class Demo {
    public static void Main() {
        // List 1: 10 items
        SortedList list1 = new SortedList();
        for (int i = 1; i <= 10; i++) list1.Add($"Key{i}", $"Value{i}");
        
        Console.WriteLine($"List1 Count: {list1.Count}, Capacity: {list1.Capacity}"); // 10, 16
        list1.TrimToSize();
        Console.WriteLine($"List1 Capacity (trimmed): {list1.Capacity}");              // 10
        
        // List 2: 4 items
        SortedList list2 = new SortedList();
        list2.Add("A", "Accessories");
        list2.Add("B", "Books");
        list2.Add("C", "Smart Wearable Tech");
        list2.Add("D", "Home Appliances");
        
        Console.WriteLine($"\nList2 Count: {list2.Count}, Capacity: {list2.Capacity}"); // 4, 16
        list2.TrimToSize();
        Console.WriteLine($"List2 Capacity (trimmed): {list2.Capacity}");                // 4
    }
}

কখন TrimToSize ব্যবহার করবেন?

  • বড় সংখ্যক আইটেম রিমুভ করার পর: যদি ১০০০ আইটেম ছিল, ৯০০ মুছে ফেললে ক্যাপাসিটি ১০২৪ থাকবে — TrimToSize করলে ১০০ হবে
  • মেমরি-সংবেদনশীল অ্যাপ্লিকেশন: এমবেডেড সিস্টেম, লার্জ স্কেল সার্ভিস
  • সিরিয়ালাইজেশন আগে: ছোট আকারে সিরিয়ালাইজ হবে
  • নয়: ফ্রিকোয়েন্ট অ্যাড/রিমুভ হলে — রি-অ্যালোকেশন ওভারহেড বেড়াবে

পারফরম্যান্স নোট

  • TrimToSize O(n) অপারেশন (নতুন অ্যারে alokate + কপি)
  • এটি থ্রেড-সেফ নয় — কনকারেন্ট অ্যাক্সেসে লক দরকার
  • SortedList<TKey, TValue> (জেনেরিক ভার্সন) এও একই মেথড রয়েছে

জেনেরিক ভার্সন উদাহরণ


var list = new SortedList<int, string>();
for (int i = 0; i < 100; i++) list.Add(i, $"Item {i}");

Console.WriteLine($"Before: Count={list.Count}, Capacity={list.Capacity}"); // 100, 128
list.RemoveRange(50, 50); // Remove last 50
Console.WriteLine($"After Remove: Count={list.Count}, Capacity={list.Capacity}"); // 50, 128
list.TrimToSize();
Console.WriteLine($"After Trim: Count={list.Count}, Capacity={list.Capacity}");   // 50, 50
  1. C#-এ SortedList-র নির্দিষ্ট ভ্যালু-এর ইনডেক্স পাওয়া

  2. C#-এ Object ক্লাস: বেস ক্লাস এবং এর মেথডসমূহ

  3. C#-এ SortedList ক্লাসের Capacity প্রোপার্টি কী?

  4. পাইথন প্যান্ডাস - ইন্ডেক্স অবজেক্টে অনন্য এলিমেন্টের সংখ্যা ফেরত দেওয়া