Прочитать на английском

Поделиться через


HashSet<T>.TrimExcess Метод

Определение

Перегрузки

TrimExcess()

Задает емкость объекта HashSet<T> фактическим числом элементов, содержащихся в нем, округленным до близкого значения для конкретной реализации.

TrimExcess(Int32)

Задает емкость объекта HashSet<T> в указанное число записей, округленное до ближайшего значения, зависящего от реализации.

TrimExcess()

Исходный код:
HashSet.cs
Исходный код:
HashSet.cs
Исходный код:
HashSet.cs

Задает емкость объекта HashSet<T> фактическим числом элементов, содержащихся в нем, округленным до близкого значения для конкретной реализации.

public:
 void TrimExcess();
public void TrimExcess();
member this.TrimExcess : unit -> unit
Public Sub TrimExcess ()

Примеры

Следующий пример создает и заполняет коллекцию HashSet<T>, а затем очищает коллекцию и освобождает память, на которую он ссылается.

HashSet<int> Numbers = new HashSet<int>();

for (int i = 0; i < 10; i++)
{
    Numbers.Add(i);
}

Console.Write("Numbers contains {0} elements: ", Numbers.Count);
DisplaySet(Numbers);

Numbers.Clear();
Numbers.TrimExcess();

Console.Write("Numbers contains {0} elements: ", Numbers.Count);
DisplaySet(Numbers);

void DisplaySet(HashSet<int> set)
{
    Console.Write("{");
    foreach (int i in set)
    {
        Console.Write(" {0}", i);
    }
    Console.WriteLine(" }");
}

/* This example produces output similar to the following:
* Numbers contains 10 elements: { 0 1 2 3 4 5 6 7 8 9 }
* Numbers contains 0 elements: { }
*/
let displaySet (set: HashSet<int>) =
    printf "{"

    for i in set do
        printf $" {i}"

    printfn " }"
// This example produces output similar to the following:
//     Numbers contains 10 elements: { 0 1 2 3 4 5 6 7 8 9 }
//     Numbers contains 0 elements: { }
let numbers = HashSet<int>()

for i = 0 to 9 do
    numbers.Add i |> ignore

printf $"Numbers contains {numbers.Count} elements: "
displaySet numbers

numbers.Clear()
numbers.TrimExcess()

printf $"Numbers contains {numbers.Count} elements: "
displaySet numbers
Imports System.Collections.Generic

Class Program

    Shared Sub Main()

        Dim Numbers As HashSet(Of Integer) = New HashSet(Of Integer)()

        For i As Integer = 0 To 9
            Numbers.Add(i)
        Next i

        Console.Write("Numbers contains {0} elements: ", Numbers.Count)
        DisplaySet(Numbers)

        Numbers.Clear()
        Numbers.TrimExcess()

        Console.Write("Numbers contains {0} elements: ", Numbers.Count)
        DisplaySet(Numbers)

    End Sub
    ' This code example produces output similar to the following:
    ' Numbers contains 10 elements: { 0 1 2 3 4 5 6 7 8 9 }
    ' Numbers contains 0 elements: { }

    Private Shared Sub DisplaySet(ByVal coll As HashSet(Of Integer))
        Console.Write("{")
        For Each i As Integer In coll
            Console.Write(" {0}", i)
        Next i
        Console.WriteLine(" }")
    End Sub

End Class

Комментарии

Вы можете использовать метод TrimExcess, чтобы свести к минимуму нагрузку на память объекта HashSet<T> после того, как известно, что новые элементы не будут добавлены. Чтобы полностью очистить объект HashSet<T> и освободить всю память, на которую он ссылается, вызовите этот метод после вызова метода Clear.

Этот метод является операцией O(n) , где nCount.

Применяется к

.NET 10 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

TrimExcess(Int32)

Исходный код:
HashSet.cs

Задает емкость объекта HashSet<T> в указанное число записей, округленное до ближайшего значения, зависящего от реализации.

public:
 void TrimExcess(int capacity);
public void TrimExcess(int capacity);
member this.TrimExcess : int -> unit
Public Sub TrimExcess (capacity As Integer)

Параметры

capacity
Int32

Новая емкость.

Исключения

Указанная емкость ниже количества записей.

Применяется к

.NET 10 и .NET 9
Продукт Версии
.NET 9, 10