List<T>.TrimExcess Method
Microsoft Silverlight will reach end of support after October 2021. Learn more.
Sets the capacity to the actual number of elements in the List<T>, if that number is less than a threshold value.
Namespace: System.Collections.Generic
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Public Sub TrimExcess
public void TrimExcess()
Remarks
This method can be used to minimize a collection's memory overhead if no new elements will be added to the collection. 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. This avoids incurring a large reallocation cost for a relatively small gain.
Note: |
---|
The current threshold of 90 percent might change in future releases. |
This method is an O(n) operation, where n is Count.
To reset a List<T> to its initial state, call the Clear method before calling the TrimExcess method. Trimming an empty List<T> sets the capacity of the List<T> to the default capacity.
The capacity can also be set using the Capacity property.
Examples
The following code example demonstrates the TrimExcess method. Several properties and methods of the List<T> class are used to add, insert, and remove items from a list of strings. Then the TrimExcess method is used to reduce the capacity to match the count, and the Capacity and Count properties are displayed. If the unused capacity had been less than 10 percent of total capacity, the list would not have been resized. Finally, the contents of the list are cleared.
Imports System.Collections.Generic
Public Class Example
Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
Dim dinosaurs As New List(Of String)
outputBlock.Text &= String.Format(vbLf & "Capacity: {0}", dinosaurs.Capacity) & vbCrLf
dinosaurs.Add("Tyrannosaurus")
dinosaurs.Add("Amargasaurus")
dinosaurs.Add("Mamenchisaurus")
dinosaurs.Add("Deinonychus")
dinosaurs.Add("Compsognathus")
outputBlock.Text &= vbCrLf
For Each dinosaur As String In dinosaurs
outputBlock.Text &= dinosaur & vbCrLf
Next
outputBlock.Text &= String.Format(vbLf & "Capacity: {0}", dinosaurs.Capacity) & vbCrLf
outputBlock.Text &= String.Format("Count: {0}", dinosaurs.Count) & vbCrLf
outputBlock.Text &= vbLf & String.Format("Contains(""Deinonychus"": {0}", _
dinosaurs.Contains("Deinonychus")) & vbCrLf
outputBlock.Text &= String.Format(vbLf & "Insert(2, ""Compsognathus"")") & vbCrLf
dinosaurs.Insert(2, "Compsognathus")
outputBlock.Text &= vbCrLf
For Each dinosaur As String In dinosaurs
outputBlock.Text &= dinosaur & vbCrLf
Next
outputBlock.Text &= String.Format(vbLf & "dinosaurs(3): {0}", dinosaurs(3)) & vbCrLf
outputBlock.Text &= vbLf & "Remove(""Compsognathus"")" & vbCrLf
dinosaurs.Remove("Compsognathus")
outputBlock.Text &= vbCrLf
For Each dinosaur As String In dinosaurs
outputBlock.Text &= dinosaur & vbCrLf
Next
dinosaurs.TrimExcess()
outputBlock.Text &= vbLf & "TrimExcess()" & vbCrLf
outputBlock.Text &= String.Format("Capacity: {0}", dinosaurs.Capacity) & vbCrLf
outputBlock.Text &= String.Format("Count: {0}", dinosaurs.Count) & vbCrLf
dinosaurs.Clear()
outputBlock.Text &= vbLf & "Clear()" & vbCrLf
outputBlock.Text &= String.Format("Capacity: {0}", dinosaurs.Capacity) & vbCrLf
outputBlock.Text &= String.Format("Count: {0}", dinosaurs.Count) & vbCrLf
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
using System;
using System.Collections.Generic;
public class Example
{
public static void Demo(System.Windows.Controls.TextBlock outputBlock)
{
List<string> dinosaurs = new List<string>();
outputBlock.Text += String.Format("\nCapacity: {0}", dinosaurs.Capacity) + "\n";
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Mamenchisaurus");
dinosaurs.Add("Deinonychus");
dinosaurs.Add("Compsognathus");
outputBlock.Text += "\n";
foreach (string dinosaur in dinosaurs)
{
outputBlock.Text += dinosaur + "\n";
}
outputBlock.Text += String.Format("\nCapacity: {0}", dinosaurs.Capacity) + "\n";
outputBlock.Text += String.Format("Count: {0}", dinosaurs.Count) + "\n";
outputBlock.Text += String.Format("\nContains(\"Deinonychus\"): {0}",
dinosaurs.Contains("Deinonychus")) + "\n";
outputBlock.Text += String.Format("\nInsert(2, \"Compsognathus\")") + "\n";
dinosaurs.Insert(2, "Compsognathus");
outputBlock.Text += "\n";
foreach (string dinosaur in dinosaurs)
{
outputBlock.Text += dinosaur + "\n";
}
outputBlock.Text += String.Format("\ndinosaurs[3]: {0}", dinosaurs[3]) + "\n";
outputBlock.Text += "\nRemove(\"Compsognathus\")" + "\n";
dinosaurs.Remove("Compsognathus");
outputBlock.Text += "\n";
foreach (string dinosaur in dinosaurs)
{
outputBlock.Text += dinosaur + "\n";
}
dinosaurs.TrimExcess();
outputBlock.Text += "\nTrimExcess()" + "\n";
outputBlock.Text += String.Format("Capacity: {0}", dinosaurs.Capacity) + "\n";
outputBlock.Text += String.Format("Count: {0}", dinosaurs.Count) + "\n";
dinosaurs.Clear();
outputBlock.Text += "\nClear()" + "\n";
outputBlock.Text += String.Format("Capacity: {0}", dinosaurs.Capacity) + "\n";
outputBlock.Text += String.Format("Count: {0}", dinosaurs.Count) + "\n";
}
}
/* 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
*/
Version Information
Silverlight
Supported in: 5, 4, 3
Silverlight for Windows Phone
Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0
XNA Framework
Supported in: Xbox 360, Windows Phone OS 7.0
Platforms
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.