Я думаю, что это требует изменения алгоритма.
Из того, что я слышал и понимал, GC довольно хорош в упаковке и дефрагментации памяти. Итак, ваша проблема проистекает из простого факта, что вы сохраняете слишком много данных в памяти.
Сколько данных вы храните в памяти?
Вы думали об использовании базы данных? компактного может быть достаточно.
Или просто скажите своему клиенту, что для корректной работы вашего приложения ему нужно 16 ГБ памяти. И если вашему приложению нужны все эти 16 ГБ памяти, то определенно что-то не так.
Редактировать :
Глядя на вашу проблему с другой стороны, и после прочтения вашей правки у меня возник вопрос: насколько велики ваши объекты? Или они содержат длинные списки или массивы? Как часто вы удаляете / добавляете эти объекты?
Я думаю, что проблема может быть не в самом словаре, а в слишком больших объектах, которые удаляются / добавляются слишком часто. Возможно, использование какого-либо вида ловли или пула может быть выгодным. А если вы используете списки, то создайте эти списки с предварительно назначенными.
И, возможно, использование неизменяемых структур вместо изменяемых классов может облегчить фрагментацию.