C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のStack.TrimExcess()メソッドをサンプルコードでわかりやすく解説

C#におけるStack<T>.TrimExcess()メソッドは、スタックの容量が閾値(しきい値)を超えている場合に、容量を現在の実際の要素数まで縮小するためのメソッドです。大量の要素を削除した後など、不要になったメモリを解放したい場面で活用できます。

構文

public void TrimExcess();

引数は取らず、戻り値もありません。呼び出すだけで、内部配列の容量が実際の要素数に合わせて調整されます。

使用例1:int型のスタック

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      Stack<int> stack = new Stack<int>();
      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("スタック内の要素:");
      foreach(var val in stack) {
         Console.WriteLine(val);
      }

      Console.WriteLine("スタックの要素数 = " + stack.Count);
      Console.WriteLine("スタックに400は含まれるか? = " + stack.Contains(400));

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

      Console.WriteLine("スタックの要素数(更新後) = " + stack.Count);
   }
}

出力結果

スタック内の要素:
500
450
400
300
250
225
200
175
150
100
スタックの要素数 = 10
スタックに400は含まれるか? = True
スタックの要素数(更新後) = 0

使用例2:string型のスタック

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      Stack<string> stack = new Stack<string>();
      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("要素数 = " + stack.Count);
      Console.WriteLine("スタック内の要素...");

      foreach (string res in stack) {
         Console.WriteLine(res);
      }

      Console.Write("要素数(更新前) = " + stack.Count);

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

      Console.WriteLine("スタックの要素数(更新後) = " + stack.Count);
   }
}

出力結果

要素数 = 8
スタック内の要素...
H
G
F
E
D
C
B
A
要素数(更新前) = 8
スタックの要素数(更新後) = 0

ポイントまとめ

  • TrimExcess()は、Clear()メソッドで全要素を削除した後に呼び出すことで、確保されていたメモリを効率的に解放できます。
  • 要素数が閾値(既定では容量の90%)未満の場合のみ容量が縮小されるため、頻繁な再割り当てによるパフォーマンス低下を防ぎます。
  • Push()とPop()を繰り返す処理では、毎回TrimExcess()を呼ぶと逆にパフォーマンスが悪化する可能性があるため、使いどころを見極めることが重要です。
  1. C#のMathF.Exp()メソッドとは?使い方とサンプルコードを解説

    C#のMathF.Exp()メソッドは、自然対数の底 e(約2.71828)を、引数で指定した数値のべき乗にして返すメソッドです。つまり、Exp(x) は「e の x 乗」を計算し、その結果を float型 で返します。構文MathF.Exp()メソッドの構文は以下の通りです。public static float Exp(float val);引数 val には、べき乗の指数となる浮動小数点数(float型)を指定します。主な特徴戻り値は常にfloat型です。計算結果がfloat型の最大値(約3.4×1038)を超える場合は、Infinity(無限大)が返されます。引数に 0 を指定すると、

  2. C#のMathF.Ceiling()メソッドの使い方を具体例付きで解説

    MathF.Ceiling()メソッドとはC#のMathF.Ceiling()メソッドは、引数として渡されたfloat型の値「以上」である最小の整数値を返すメソッドです。いわゆる「切り上げ」処理を行うためのもので、戻り値の型はfloatです。構文MathF.Ceiling()メソッドの構文は以下のとおりです。public static float Ceiling (float val);引数valには、切り上げたい浮動小数点数(float型)を指定します。使用例1:正の数の場合それでは、MathF.Ceiling()メソッドを使った具体的なサンプルコードを見てみましょう。using Syste