Нужна конкретная постановка задачи.

Вам нужно использовать Viewer-ы в системе реального времени?

Подход Дагаева - выделили на старте нужное количество (или в пул с запасом) - и дальше используете, с уже выключенным NEW/GC.

Можно поиграть, если есть необходимость, и с другой стратегией выделения таких объектов - тупо линейной (как выделяются объекты в первом поколении в .NET), когда нарезается следующий кусок нужного размера под объект в линейной области памяти.