В отличие от других ответов здесь я заявляю: да, нужно заботиться о фрагментации! Она применяется не только для управляемых куч, но для всех приложений обработки (по крайней мере)
- много «большого» RESSOURCES в
- тяжелый шаблон распределения.
Поскольку объект LOB не уплотняется, он со временем, скорее всего, будет фрагментирован, как только размер и количество объектов превысят определенное значение (которое относится к общему максимальному размеру кучи). Если это так, единственный безопасный способ - ограничить количество мгновенно удерживаемых ссылок на эти объекты. Кэш (пул) помог бы, если бы пул объектов можно было повторно использовать. Иногда, если эти ресурсы состоят из массивов различной длины f.e., они могут быть недоступны для повторного использования. Таким образом, объединение может не сильно помочь здесь.
Как его обнаружить? Когда когда-либо есть большое давление на кучу больших объектов. Как это узнать? Одновременно используйте счетчик производительности .NET «Collection Count Gen 0 ... 2». Если из большого объекта выделено слишком много больших объектов, все счетчики будут развиваться одинаково. Смысл, в основном все коллекции дорогой поколения 2 коллекции. В этом случае должно быть что-то сделано.
Что касается небольших объектов, я бы позволил GC выполнить всю работу в коллекциях Gen 0 и не волноваться.
+1. Не выдерживает, когда люди проводят время «оптимизируя» без уважительной причины. –
Да - кэширование происходит за счет скорости выполнения. –
... но если он не позволяет GC собирать LOH ** все время **, он наверняка может оплатить – user492238