В отличие от других ответов, приведенных здесь, я заявляю: да, нужно позаботиться о фрагментации! Это относится не только к управляемым кучам, но и ко всем приложениям, обрабатывающим (по крайней мере)
- много "больших" ресурсов в
- шаблон тяжелого распределения.
Поскольку большой объект не уплотняется, он - со временем - наиболее вероятно будет фрагментирован, как только размер и количество объектов превысят определенное значение (что относится к общему доступному максимальному размеру кучи). Если это так, единственный безопасный способ - это ограничить количество мгновенно сохраняемых ссылок на эти объекты. Кэш (пул) поможет, только если объединенные объекты могут быть использованы повторно. Иногда, если эти ресурсы состоят из массивов различной длины, например, они не могут быть легко использованы повторно. Таким образом, объединение может не сильно помочь здесь.
Как это обнаружить? Когда когда-либо будет большое давление на кучу больших объектов. Как это узнать? Используйте счетчик производительности .NET «Collection Count Gen 0 ... 2» одновременно. Если из большого объекта выделено слишком много больших объектов, все счетчики будут развиваться одинаково. Это означает, что в основном все коллекции являются дорогими коллекциями второго поколения. В этом случае, что-то должно быть сделано.
Что касается более мелких объектов, я бы позволил ГХ выполнять всю работу в коллекциях поколения 0 и не беспокоиться.