# CollectionPool<TCollection, TItem>

> A Collection such as List, HashSet, Dictionary etc can be pooled and reused by using a CollectionPool.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.Pool](/engine/6000.6/script-reference/unityengine/pool.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public class CollectionPool<TCollection, TItem> where TCollection : class, ICollection<TItem>, new()
```

## Remarks

Note the CollectionPool is not thread-safe. Additional Resources: [DictionaryPool\<TKey, TValue>](/engine/6000.6/script-reference/unityengine/pool/dictionarypool2.md), [HashSetPool\<T>](/engine/6000.6/script-reference/unityengine/pool/hashsetpool1.md), [ListPool\<T>](/engine/6000.6/script-reference/unityengine/pool/listpool1.md).

## Examples

```csharp
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Pool;

// This example shows how both version of Get could be used to simplify a line of points.
public class Simplify2DLine
{
    public List<Vector2> SimplifyLine(Vector2[] points)
    {
        // This version will only be returned to the pool if we call Release on it.
        var simplifiedPoints = CollectionPool<List<Vector2>, Vector2>.Get();

        // Copy the points into a temp list so we can pass them into the Simplify method
        // When the pooled object leaves the scope it will be Disposed and returned to the pool automatically.
        // This version is ideal for working with temporary lists.
        using (CollectionPool<List<Vector2>, Vector2>.Get(out List<Vector2> tempList))
        {
            for (int i = 0; i < points.Length; ++i)
            {
                tempList.Add(points[i]);
            }

            LineUtility.Simplify(tempList, 1.5f, simplifiedPoints);
        }
        return simplifiedPoints;
    }
}
```

## Static Methods

| Method                                                                                 | Description                                                                              |
| -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| [Get](/engine/6000.6/script-reference/unityengine/pool/collectionpool2/get.md)         | Get an instance from the pool. If the pool is empty then a new instance will be created. |
| [Release](/engine/6000.6/script-reference/unityengine/pool/collectionpool2/release.md) | Returns the instance back to the pool.                                                   |
