从理论上讲,不传输数据才是最好的——即所有工作都放到C#或C++一侧,另一侧只拿到一个最终结果。当然能否这样实现取决于你们的程序模型。
确实需要传输数据的话,P/Invoke也只是其中一种方案,其他可能还包括共享内存,消息,IPC,管道,Socket,文件,数据库,队列,COM,等等。没有足够的细节,无法说哪个最好。