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 করলে ১০০ হবে
- মেমরি-সংবেদনশীল অ্যাপ্লিকেশন: এমবেডেড সিস্টেম, লার্জ স্কেল সার্ভিস
- সিরিয়ালাইজেশন আগে: ছোট আকারে সিরিয়ালাইজ হবে
- নয়: ফ্রিকোয়েন্ট অ্যাড/রিমুভ হলে — রি-অ্যালোকেশন ওভারহেড বেড়াবে
পারফরম্যান্স নোট
TrimToSizeO(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