Для меня, если абсолютно невозможно изменить / заменить dll c ++, и вы уверены, что в слое PInvoke проблем нет, единственный вариант, если производительность остается приемлемой, это изолировать вызов dll в исполняемом файле, связывающийся с основным с помощью некоторого IPC (например, Remoting), чтобы вы могли принудительно перезапустить процесс хостинга. Этот подход будет работать, только если способ, которым вы вызываете dll c ++, не слишком гранулирован. Чтобы сделать это с наименьшими усилиями, можно создать веб-службу , на которой размещен вызов C ++ (если вызов C ++ в качестве веб-службы возможен всегда с точки зрения производительности), разместить его в специальном appdomain и укажите для него получение на основе объема памяти. Если это невозможно, решение, предложенное SeeSharp в его комментарии ниже, вероятно, является лучшим.