Если вы в порядке, смешивая управляемый и неуправляемый код, сделайте вашу реализацию RDMA библиотекой (предпочтительно на c ++), которая выполняет все свое собственное управление памятью.
Оберните эту библиотеку через P / Invoke или C ++ / CLI. Если ваш API болтлив и имеет объекты C ++ с сохранением состояния с семантикой удаления, это будет намного проще и лучше в C ++ / CLI.
Тогда вы получите полную производительность RDMA на низком уровне, и только затраты, связанные с .Net, будут понесены, когда вы копируете некоторые данные из неуправляемого уровня в управляемый (скажем, для упрощения манипулирования).
Даже этого можно избежать, если вы захотите, предоставив достаточно богатый API-интерфейс для базовых данных в неуправляемой памяти. Это повлечет за собой незначительные затраты на управляемый / неуправляемый переход, поэтому было бы неуместным для чрезвычайно болтливого интерфейса, но реальной причиной избежать этого было бы значительное затруднение при реализации, поэтому это, конечно, не будет моим первым выбором по сравнению с простым извлечением данных, которые вы хочу в управляемый мир.
Я бы не подумал, что чисто управляемое решение будет работать с RDMA без опасных хаков (например, с использованием LOH, не сжатым).