Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức Stack.TrimExcess() trong C# với ví dụ

Phương thức Stack.TrimExcess() trong C# được sử dụng để đặt dung lượng (capacity) của Stack bằng số lượng phần tử thực tế, nếu số lượng đó nhỏ hơn một giá trị ngưỡng nhất định. Điều này giúp giải phóng bộ nhớ không sử dụng.

Cú pháp

public void TrimExcess();

Ví dụ 1: Stack kiểu int

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        Stack stack = new Stack();

        // Thêm 10 phần tử
        stack.Push(100);
        stack.Push(150);
        stack.Push(175);
        stack.Push(200);
        stack.Push(225);
        stack.Push(250);
        stack.Push(300);
        stack.Push(400);
        stack.Push(450);
        stack.Push(500);

        Console.WriteLine("Các phần tử trong Stack:");
        foreach (var val in stack)
        {
            Console.WriteLine(val);
        }

        Console.WriteLine("Số lượng phần tử = " + stack.Count);
        Console.WriteLine("Stack có chứa 400? = " + stack.Contains(400));

        // Xóa tất cả phần tử
        stack.Clear();
        // Thu gọn dung lượng
        stack.TrimExcess();

        Console.WriteLine("Số lượng phần tử (sau cập nhật) = " + stack.Count);
    }
}

Kết quả

Các phần tử trong Stack:
500
450
400
300
250
225
200
175
150
100
Số lượng phần tử = 10
Stack có chứa 400? = True
Số lượng phần tử (sau cập nhật) = 0

Ví dụ 2: Stack kiểu string

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        Stack stack = new Stack();

        stack.Push("A");
        stack.Push("B");
        stack.Push("C");
        stack.Push("D");
        stack.Push("E");
        stack.Push("F");
        stack.Push("G");
        stack.Push("H");

        Console.WriteLine("Số lượng phần tử = " + stack.Count);
        Console.WriteLine("Các phần tử trong Stack...");
        foreach (string res in stack)
        {
            Console.WriteLine(res);
        }

        Console.Write("Số lượng phần tử (cập nhật) = " + stack.Count);

        stack.Clear();
        stack.TrimExcess();

        Console.WriteLine("\nSố lượng phần tử trong Stack (cập nhật) = " + stack.Count);
    }
}

Kết quả

Số lượng phần tử = 8
Các phần tử trong Stack...
H
G
F
E
D
C
B
A
Số lượng phần tử (cập nhật) = 8
Số lượng phần tử trong Stack (cập nhật) = 0

Giải thích

  • Count trả về số phần tử thực tế trong Stack.
  • Capacity là dung lượng nội bộ đã cấp phát (thường lớn hơn Count để tối ưu hiệu suất khi Push).
  • TrimExcess() chỉ giảm Capacity khi Count nhỏ hơn 90% Capacity (ngưỡng mặc định).
  • Sau Clear(), Count = 0 nhưng Capacity vẫn giữ nguyên. Gọi TrimExcess() sau Clear sẽ giải phóng bộ nhớ.

Khi nào nên dùng TrimExcess()?

  • Khi đã xóa lượng lớn phần tử và không dự định thêm nữa.
  • Ứng dụng nhạy cảm về bộ nhớ (embedded, mobile).
  • Trước khi serialize Stack để giảm kích thước dữ liệu.