Как сделать так, чтобы сборщик мусора очищал объекты RCW, связанные с COM-сервером out-proc?
У меня есть 64-битный процесс.NET, который работает в течение нескольких дней. Процесс использует собственный 32-битный COM-сервер с использованием DCOM. Время от времени серверу COM не хватает памяти, потому что сборщик мусора процесса.NET видит только RCW объектов COM, и они довольно легковесны и "их не стоит собирать". Мне нужно как-то сделать сборщик мусора осведомленным об этих объектах COM.
Кстати, я пытался периодически запускать один и тот же код, принудительно запуская сборку мусора, и проблема исчезла, поэтому проблема не в какой-то утечке, а в том, что объекты собирались недостаточно быстро.
Да я знаю есть GC.AddMemoryPressure()
что позволяет сказать сборщику мусора, что мы теперь потребляем больше памяти. Проблема заключается в том, что 64-битный процесс.NET может воспринимать это как "не большое дело" - он 64-битный и хорошо, гигабайт здесь и еще один гигабайт там - "кого это волнует", но 32-битный процесс, в котором фактически живут объекты гораздо более чувствителен к этим распределениям.
Так что то, что может быть "не страшным" для 64-битного процесса, безусловно, является серьезной проблемой для 32-битного процесса, и мне нужно как-то сделать сборщик мусора 64-битного процесса более чувствительным к количеству используемой памяти другим процессом.
Как я могу справиться с этой ситуацией, чтобы 64-битный процесс своевременно собирал RCW, а 32-битному COM-серверу не хватало памяти?