Class ListPool
Public
Lightweight List Pool.
Handy class for pooling lists of type T.
Usage:
Claim a new list usingList<SomeClass> foo = ListPool<SomeClass>.Claim ();
Use it and do stuff with it
Release it withListPool<SomeClass>.Release (foo);
You do not need to clear the list before releasing it. After you have released a list, you should never use it again, if you do use it, you will mess things up quite badly in the worst case.
Public Static Methods
List<T>
Claim
()
Claim a list.
Returns a pooled list if any are in the pool. Otherwise it creates a new one. After usage, this list should be released using the Release function (though not strictly necessary).
List<T>
Claim
(
)
Claim a list with minimum capacity Returns a pooled list if any are in the pool.
Otherwise it creates a new one. After usage, this list should be released using the Release function (though not strictly necessary). A subset of the pool will be searched for a list with a high enough capacity and one will be returned if possible, otherwise the list with the largest capacity found will be returned.
void
Clear
()
Clears the pool for lists of this type.
This is an O(n) operation, where n is the number of pooled lists.
int
GetSize
()
Number of lists of this type in the pool.
void
Release
(
)
Releases a list and sets the variable to null.
After the list has been released it should not be used anymore.
void
Release
(
)
Releases a list.
After the list has been released it should not be used anymore.
void
Warmup
(
)
Makes sure the pool contains at least count pooled items with capacity size.
This is good if you want to do all allocations at start.
Private/Protected Members
int
FindCandidate
(
List<List<T>> | pool | |
int | capacity | |
)
const int
LargeThreshold = 5000
const int
MaxCapacitySearchLength = 8
When requesting a list with a specified capacity, search max this many lists in the pool before giving up.
Must be greater or equal to one.
const int
MaxLargePoolSize = 8
HashSet<List<T>>
inPool = new HashSet<List<T> >()
List<List<T>>
largePool = new List<List<T> >()
List<List<T>>
pool = new List<List<T> >()
Internal pool.