Думайте в терминах двух наборов объектов:
queue other things
+------+
| slot | -> item
| slot | -> item
| slot | -> item
: :
| slot | -> item
+------+
Хотя сами элементы могут собираться мусором, когда они больше не используются, это не влияет на объект single , очередь, которая все еще используется.
Однако в какой-то момент, когда ваша нагрузка была высокой, она могла быть расширена до слота gazillion, и он будет сохранять этот размер, пока не будет сказано иначе.
Вызывая TrimToSize
в очереди, вы уменьшаете количество используемых слотов , потенциально высвобождая память обратно в свободный пул для других целей.
Очередь может стать довольно большой, даже без добавления большого количества элементов, поскольку вы можете настроить для нее высокий множитель (значение, на которое умножается ее емкость при добавлении в полную очередь).
Это все просто хорошее управление памятью, часто используемое для очередей, когда вы знаете, что они больше не будут увеличиваться в размерах.
Классическим примером этого является чтение элементов конфигурации из файла. После того, как вы их прочитаете, маловероятно, что они снова увеличатся в размере (пока вы не перечитаете файл, что обычно случается редко).
Если ваша очередь может часто менять размер, вверх и вниз повсюду, вам может быть лучше не , используя TrimToSize
.