Reducing the capacity of the list is associated with a new array of support and copying data through it, so this is a relatively expensive operation.
In your particular case, I would say that this is not worth it unless you start to run into memory problems.
One strategy that can be used if it should become a real problem is to create a "chunked" implementation of IList<> , which uses not one array, but several, each of a pre-configured size, with additional fragments (fixed-size arrays) added as the previous one fills. It also allows you to shrink a relatively inexpensive list, freeing up unused chunks when deleting items, minimizing memory overhead to one incomplete fragment (the last).
This approach adds performance overhead for all operations in the list, though, since the list should calculate which piece of elements is in and create new pieces as needed. Therefore, this is not useful if you really have a memory problem and a list that really really changes size over time.
source share