С такими большими блоками памяти ("сотни мегабайт") должно быть относительно легко узнать, кто и где их использует (в любом случае вы можете разместить в памяти всего 10-20 таких блоков) Поскольку ypu планирует использовать такие объемы памяти, вам необходимо тщательно планировать использование памяти - то есть простая копия всего буфера займет нетривиальное время.
Когда вы закончите с конкретным блоком, вы можете самостоятельно заставить GC. Это звучит как разумное использование API GC.Collect - вы сделали с использованием огромной части всей доступной памяти.
Вы также можете рассмотреть возможность переключения на более мелкие (64 КБ) блоки и связать их вместе, если это работает для вашего приложения. Это будет лучше согласовываться со сборкой мусора и может обеспечить большую гибкость для вашего приложения.