Сначала немного рассмотрим, что такое большой объект. В .net считается, что большой объект имеет 85 000 или более байтов. У вас действительно есть такие большие объекты или у вас очень большой график из более мелких объектов?
Если это график более мелких объектов, то они хранятся в SOH (куче небольших объектов). В этом случае, если вы создаете объекты и отпускаете их немедленно, вы получите максимальную выгоду от оптимизаций сборщика мусора, предполагающих модель поколений. Я имею в виду, что вы либо создаете объекты и позволяете им умирать, либо сохраняете их навсегда. Держать их просто «на некоторое время», или, другими словами, объединение, просто позволит им продвинуться до более высоких поколений (до 2-го поколения), и это снизит производительность GC, потому что очистка объектов 2-го поколения стоит дорого ( вечные объекты во втором поколении не дорогие, однако). Не беспокойтесь о фрагментации памяти. Если вы не выполняете взаимодействие или такие сложные вещи, как закрепление объектов, GC очень эффективен для предотвращения фрагментации памяти - он сжимает память, освобождая ее от эфемерного сегмента.
Если у вас действительно есть очень большие объекты (например, очень большие массивы), то он может заплатить, чтобы объединить их. Однако обратите внимание, что если массивы содержат ссылки на меньшие объекты, их объединение приведет к проблемам, о которых я говорил в предыдущем абзаце, поэтому вам следует тщательно очищать массив (его ссылки указывают на ноль) часто (каждую итерацию? ).
С учетом вышесказанного тот факт, что вы вызываете IDisposable, не является очисткой объектов. GC делает так. Утилизация отвечает за очистку неуправляемых ресурсов. Тем не менее, очень важно, чтобы вы продолжали вызывать Dispose для каждого объекта, класс которого реализует IDisposable (лучший способ - наконец-то), потому что вы потенциально освобождаете неуправляемые ресурсы немедленно, а также потому, что вы говорите GC, что это не нужно вызывать финализатор объекта, что привело бы к ненужному продвижению объекта, что, как мы видели, является нет нет.
Итог, GC действительно хорош в распределении и очистке вещей. Попытка помочь ему обычно приводит к ухудшению производительности, если вы действительно не знаете, что происходит.
Чтобы действительно понять, о чем я говорю:
Сборка мусора: автоматическое управление памятью в Microsoft .NET Framework
Сборка мусора: автоматическое управление памятью в Microsoft .NET Framework 2
Обнаружена куча больших объектов