# List<T>.TrimExcess Methode

## Definition

Legt die Kapazität auf die Anzahl der tatsächlich in der List<T> befindlichen Elemente fest, sofern diese Anzahl unter dem Schwellenwert liegt.Sets the capacity to the actual number of elements in the List<T>, if that number is less than a threshold value.

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

## Beispiele

Im folgenden Beispiel wird veranschaulicht, wie die Kapazität und die Anzahl einer List<T> überprüft werden, die ein einfaches Geschäftsobjekt enthält, und es wird veranschaulicht, wie die TrimExcess-Methode verwendet wird, um zusätzliche Kapazität zu entfernen.The following example demonstrates how to check the capacity and count of a List<T> that contains a simple business object, and illustrates using the TrimExcess method to remove extra capacity.

``````using System;
using System.Collections.Generic;
// Simple business object. A PartId is used to identify a part
// but the part name be different for the same Id.
public class Part : IEquatable<Part>
{
public string PartName { get; set; }
public int PartId { get; set; }
public override string ToString()
{
return "ID: " + PartId + "   Name: " + PartName;
}
public override bool Equals(object obj)
{
if (obj == null) return false;
Part objAsPart = obj as Part;
if (objAsPart == null) return false;
else return Equals(objAsPart);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public bool Equals(Part other)
{
if (other == null) return false;
return (this.PartId.Equals(other.PartId));
}
// Should also override == and != operators.
}
public class Example
{

public static void Main()
{
List<Part> parts = new List<Part>();

Console.WriteLine("\nCapacity: {0}", parts.Capacity);

parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
parts.Add(new Part() { PartName = "seat", PartId = 1434 });
parts.Add(new Part() { PartName = "cassette", PartId = 1534 });
parts.Add(new Part() { PartName = "shift lever", PartId = 1634 }); ;

Console.WriteLine();
foreach (Part aPart in parts)
{
Console.WriteLine(aPart);
}

Console.WriteLine("\nCapacity: {0}", parts.Capacity);
Console.WriteLine("Count: {0}", parts.Count);

parts.TrimExcess();
Console.WriteLine("\nTrimExcess()");
Console.WriteLine("Capacity: {0}", parts.Capacity);
Console.WriteLine("Count: {0}", parts.Count);

parts.Clear();
Console.WriteLine("\nClear()");
Console.WriteLine("Capacity: {0}", parts.Capacity);
Console.WriteLine("Count: {0}", parts.Count);
}
/*
This code example produces the following output.
Capacity: 0

ID: 1234   Name: crank arm
ID: 1334   Name: chain ring
ID: 1434   Name: seat
ID: 1534   Name: cassette
ID: 1634   Name: shift lever

Capacity: 8
Count: 5

TrimExcess()
Capacity: 5
Count: 5

Clear()
Capacity: 5
Count: 0
*/
}
``````
``````Imports System.Collections.Generic

' Simple business object. A PartId is used to identify a part
' but the part name can change.
Public Class Part
Implements IEquatable(Of Part)
Public Property PartName() As String
Get
Return m_PartName
End Get
Set(value As String)
m_PartName = Value
End Set
End Property
Private m_PartName As String
Public Property PartId() As Integer
Get
Return m_PartId
End Get
Set(value As Integer)
m_PartId = Value
End Set
End Property
Private m_PartId As Integer
Public Overrides Function ToString() As String
Return "ID: " & PartId & "   Name: " & PartName
End Function
Public Overrides Function Equals(obj As Object) As Boolean
If obj Is Nothing Then
Return False
End If
Dim objAsPart As Part = TryCast(obj, Part)
If objAsPart Is Nothing Then
Return False
Else
Return Equals(objAsPart)
End If
End Function
Public Overrides Function GetHashCode() As Integer
Return MyBase.GetHashCode()
End Function
Public Overloads Function Equals(other As Part) As Boolean Implements IEquatable(Of Part).Equals
If other Is Nothing Then
Return False
End If
Return (Me.PartId.Equals(other.PartId))
End Function
' Should also override == and != operators.

End Class
Public Class Example

Public Shared Sub Main()
Dim parts As New List(Of Part)()

Console.WriteLine(vbLf & "Capacity: {0}", parts.Capacity)

' Add parts to the list.
.PartName = "crank arm", _
.PartId = 1234 _
})
.PartName = "chain ring", _
.PartId = 1334 _
})
.PartName = "regular seat", _
.PartId = 1434 _
})
.PartName = "banana seat", _
.PartId = 1444 _
})
.PartName = "cassette", _
.PartId = 1534 _
})
.PartName = "shift lever", _
.PartId = 1634 _
})

Console.WriteLine()
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next

Console.WriteLine(vbLf & "Capacity: {0}", parts.Capacity)
Console.WriteLine("Count: {0}", parts.Count)

parts.TrimExcess()
Console.WriteLine(vbLf & "TrimExcess()")
Console.WriteLine("Capacity: {0}", parts.Capacity)
Console.WriteLine("Count: {0}", parts.Count)

parts.Clear()
Console.WriteLine(vbLf & "Clear()")
Console.WriteLine("Capacity: {0}", parts.Capacity)
Console.WriteLine("Count: {0}", parts.Count)
End Sub
'
'     This code example produces the following output.
'            Capacity: 0
'
'            ID: 1234   Name: crank arm
'            ID: 1334   Name: chain ring
'            ID: 1434   Name: seat
'            ID: 1534   Name: cassette
'            ID: 1634   Name: shift lever
'
'            Capacity: 8
'            Count: 6
'
'            TrimExcess()
'            Capacity: 6
'            Count: 6
'
'            Clear()
'            Capacity: 6
'            Count: 0
'

End Class
``````

Das folgende Beispiel veranschaulicht die TrimExcess Methode.The following example demonstrates the TrimExcess method. Mehrere Eigenschaften und Methoden der List<T>-Klasse werden zum Hinzufügen, einfügen und Entfernen von Elementen aus einer Liste von Zeichen folgen verwendet.Several properties and methods of the List<T> class are used to add, insert, and remove items from a list of strings. Anschließend wird die TrimExcess-Methode verwendet, um die Kapazität so zu reduzieren, dass Sie der Anzahl entspricht, und die Eigenschaften Capacity und Count werden angezeigt.Then the TrimExcess method is used to reduce the capacity to match the count, and the Capacity and Count properties are displayed. Wenn die nicht genutzte Kapazität weniger als 10 Prozent der Gesamtkapazität war, wurde die Größe der Liste nicht geändert.If the unused capacity had been less than 10 percent of total capacity, the list would not have been resized. Schließlich wird der Inhalt der Liste gelöscht.Finally, the contents of the list are cleared.

``````using namespace System;
using namespace System::Collections::Generic;

void main()
{
List<String^>^ dinosaurs = gcnew List<String^>();

Console::WriteLine("\nCapacity: {0}", dinosaurs->Capacity);

Console::WriteLine();
for each(String^ dinosaur in dinosaurs )
{
Console::WriteLine(dinosaur);
}

Console::WriteLine("\nCapacity: {0}", dinosaurs->Capacity);
Console::WriteLine("Count: {0}", dinosaurs->Count);

Console::WriteLine("\nContains(\"Deinonychus\"): {0}",
dinosaurs->Contains("Deinonychus"));

Console::WriteLine("\nInsert(2, \"Compsognathus\")");
dinosaurs->Insert(2, "Compsognathus");

Console::WriteLine();
for each(String^ dinosaur in dinosaurs )
{
Console::WriteLine(dinosaur);
}

Console::WriteLine("\ndinosaurs[3]: {0}", dinosaurs[3]);

Console::WriteLine("\nRemove(\"Compsognathus\")");
dinosaurs->Remove("Compsognathus");

Console::WriteLine();
for each(String^ dinosaur in dinosaurs )
{
Console::WriteLine(dinosaur);
}

dinosaurs->TrimExcess();
Console::WriteLine("\nTrimExcess()");
Console::WriteLine("Capacity: {0}", dinosaurs->Capacity);
Console::WriteLine("Count: {0}", dinosaurs->Count);

dinosaurs->Clear();
Console::WriteLine("\nClear()");
Console::WriteLine("Capacity: {0}", dinosaurs->Capacity);
Console::WriteLine("Count: {0}", dinosaurs->Count);
}

/* This code example produces the following output:

Capacity: 0

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus

Capacity: 8
Count: 5

Contains("Deinonychus"): True

Insert(2, "Compsognathus")

Tyrannosaurus
Amargasaurus
Compsognathus
Mamenchisaurus
Deinonychus
Compsognathus

dinosaurs[3]: Mamenchisaurus

Remove("Compsognathus")

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus

TrimExcess()
Capacity: 5
Count: 5

Clear()
Capacity: 5
Count: 0
*/
``````
``````List<string> dinosaurs = new List<string>();

Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);

Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}

Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count);

Console.WriteLine("\nContains(\"Deinonychus\"): {0}",
dinosaurs.Contains("Deinonychus"));

Console.WriteLine("\nInsert(2, \"Compsognathus\")");
dinosaurs.Insert(2, "Compsognathus");

Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}

// Shows accessing the list using the Item property.
Console.WriteLine("\ndinosaurs[3]: {0}", dinosaurs[3]);

Console.WriteLine("\nRemove(\"Compsognathus\")");
dinosaurs.Remove("Compsognathus");

Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}

dinosaurs.TrimExcess();
Console.WriteLine("\nTrimExcess()");
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count);

dinosaurs.Clear();
Console.WriteLine("\nClear()");
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count);

/* This code example produces the following output:

Capacity: 0

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus

Capacity: 8
Count: 5

Contains("Deinonychus"): True

Insert(2, "Compsognathus")

Tyrannosaurus
Amargasaurus
Compsognathus
Mamenchisaurus
Deinonychus
Compsognathus

dinosaurs[3]: Mamenchisaurus

Remove("Compsognathus")

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus

TrimExcess()
Capacity: 5
Count: 5

Clear()
Capacity: 5
Count: 0
*/
``````
``````Imports System.Collections.Generic

Public Class Example

Public Shared Sub Main()
Dim dinosaurs As New List(Of String)

Console.WriteLine(vbLf & "Capacity: {0}", dinosaurs.Capacity)

Console.WriteLine()
For Each dinosaur As String In dinosaurs
Console.WriteLine(dinosaur)
Next

Console.WriteLine(vbLf & "Capacity: {0}", dinosaurs.Capacity)
Console.WriteLine("Count: {0}", dinosaurs.Count)

Console.WriteLine(vbLf & "Contains(""Deinonychus""): {0}", _
dinosaurs.Contains("Deinonychus"))

Console.WriteLine(vbLf & "Insert(2, ""Compsognathus"")")
dinosaurs.Insert(2, "Compsognathus")

Console.WriteLine()
For Each dinosaur As String In dinosaurs
Console.WriteLine(dinosaur)
Next
' Shows how to access the list using the Item property.
Console.WriteLine(vbLf & "dinosaurs(3): {0}", dinosaurs(3))
Console.WriteLine(vbLf & "Remove(""Compsognathus"")")
dinosaurs.Remove("Compsognathus")

Console.WriteLine()
For Each dinosaur As String In dinosaurs
Console.WriteLine(dinosaur)
Next

dinosaurs.TrimExcess()
Console.WriteLine(vbLf & "TrimExcess()")
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity)
Console.WriteLine("Count: {0}", dinosaurs.Count)

dinosaurs.Clear()
Console.WriteLine(vbLf & "Clear()")
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity)
Console.WriteLine("Count: {0}", dinosaurs.Count)
End Sub
End Class

' This code example produces the following output:
'
'Capacity: 0
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Deinonychus
'Compsognathus
'
'Capacity: 8
'Count: 5
'
'Contains("Deinonychus"): True
'
'Insert(2, "Compsognathus")
'
'Tyrannosaurus
'Amargasaurus
'Compsognathus
'Mamenchisaurus
'Deinonychus
'Compsognathus
'
'dinosaurs(3): Mamenchisaurus
'
'Remove("Compsognathus")
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Deinonychus
'Compsognathus
'
'TrimExcess()
'Capacity: 5
'Count: 5
'
'Clear()
'Capacity: 5
'Count: 0
``````
``````
[<EntryPoint>]
let main argv =
// We refer to System.Collections.Generic.List<'T> by its type
// abbreviation ResizeArray<'T> to avoid conflict with the List module.
// Note: In F# code, F# linked lists are usually preferred over
// ResizeArray<'T> when an extendable collection is required.
let dinosaurs = ResizeArray<_>()

// Write out the dinosaurs in the ResizeArray.
let printDinosaurs() =
printfn ""
dinosaurs |> Seq.iter (fun p -> printfn "%O" p)

printfn "\nCapacity: %i" dinosaurs.Capacity

printDinosaurs()

printfn "\nCapacity: %i" dinosaurs.Capacity
printfn "Count: %i" dinosaurs.Count

printfn "\nContains(\"Deinonychus\"): %b" (dinosaurs.Contains("Deinonychus"))

printfn "\nInsert(2, \"Compsognathus\")"
dinosaurs.Insert(2, "Compsognathus")

printDinosaurs()

// Shows accessing the list using the Item property.
printfn "\ndinosaurs[3]: %s" dinosaurs.[3]

printfn "\nRemove(\"Compsognathus\")"
dinosaurs.Remove("Compsognathus") |> ignore

printDinosaurs()

dinosaurs.TrimExcess()
printfn "\nTrimExcess()"
printfn "Capacity: %i" dinosaurs.Capacity
printfn "Count: %i" dinosaurs.Count

dinosaurs.Clear()
printfn "\nClear()"
printfn "Capacity: %i" dinosaurs.Capacity
printfn "Count: %i" dinosaurs.Count

0 // return an integer exit code

(* This code example produces the following output:

Capacity: 0

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus

Capacity: 8
Count: 5

Contains("Deinonychus"): true

Insert(2, "Compsognathus")

Tyrannosaurus
Amargasaurus
Compsognathus
Mamenchisaurus
Deinonychus
Compsognathus

dinosaurs[3]: Mamenchisaurus

Remove("Compsognathus")

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus

TrimExcess()
Capacity: 5
Count: 5

Clear()
Capacity: 5
Count: 0
*)
``````

## Hinweise

Diese Methode kann verwendet werden, um den Arbeitsspeicher Aufwand einer Sammlung zu minimieren, wenn der Auflistung keine neuen Elemente hinzugefügt werden.This method can be used to minimize a collection's memory overhead if no new elements will be added to the collection. Die Kosten für das erneute zuordnen und Kopieren einer großen List<T> können jedoch beträchtlich sein, sodass die TrimExcess-Methode nichts bewirkt, wenn die Liste mehr als 90 Prozent der Kapazität hat.The cost of reallocating and copying a large List<T> can be considerable, however, so the TrimExcess method does nothing if the list is at more than 90 percent of capacity. Dadurch wird vermieden, dass für einen relativ kleinen Gewinn keine großen Kosten für die erneute Zuordnung anfallen.This avoids incurring a large reallocation cost for a relatively small gain.

Hinweis

Der aktuelle Schwellenwert von 90 Prozent kann sich in zukünftigen Versionen ändern.The current threshold of 90 percent might change in future releases.

Bei dieser Methode handelt es sich um einen O (n)-Vorgang, bei dem n Countist.This method is an O(n) operation, where n is Count.

Um einen List<T> auf seinen ursprünglichen Zustand zurückzusetzen, rufen Sie die Clear-Methode auf, bevor Sie die TrimExcess-Methode aufrufen.To reset a List<T> to its initial state, call the Clear method before calling the TrimExcess method. Wenn Sie ein leeres List<T> kürzen, wird die Kapazität des List<T> auf die Standardkapazität festgelegt.Trimming an empty List<T> sets the capacity of the List<T> to the default capacity.

Die Kapazität kann auch mit der Capacity-Eigenschaft festgelegt werden.The capacity can also be set using the Capacity property.