У вас есть правильное представление об ограничениях.Пересечение границы стоит дорого, вы не хотите делать это для мелкозернистых операций.Как мелкозернистый? Конечно, это зависит .
В идеальном случае ваш код C ++ наслоен на рациональную объектную модель, поверх которой вы можете поместить слой COM (или аналогичный) для более масштабных операций.,В качестве одного примера, вместо того, чтобы выставлять объект с 5 свойствами и парой сеттер / получатель для каждого из них, вы хотите выставить метод SetProperties (), который принимает карту всех свойств, которые должны быть установлены.Это ни в коем случае не единственный случай, на который нужно обратить внимание;это всего лишь пример того, как склонить себя к более масштабным операциям.
Про COM - это приятно, но, конечно, не обязательно.Использование COM навязывает вам дисциплину, так как вам необходимо формально определить операции в интерфейсе COM.Без формального принуждения, обеспечиваемого COM, ваша команда могла бы «обмануть» - и раскрыть многочисленные тактические точки интеграции между уровнями, что может привести к подлым проблемам с производительностью.
Если у вас есть надежное управление проектом и хорошая командачлены, тогда вы могли бы обеспечить соблюдение этих стандартов проекта, не полагаясь на формальность COM.Определите ваши собственные классы-оболочки в C #, через которые происходит все пересечение границ.
Суть в том, я подозреваю, что вы не будете знать точно правильное решение, пока не поиграете с ним и не протестируете его.
Соберите пару членов команды, хороших разработчиков, и попросите их создать прототипы двух разных вариантов.Например, тонкий против толстого, где точные значения этих терминов определены вами.Дайте им 3 недели или около того, чтобы что-то собратьЗатем измерьте их производительность и производительность и примите решение на основе этого.