我希望能够在基于Windows CLR的应用程序(.NET)上使用LDMA或RDMA。我使用C ++开发了低延迟应用程序,这些应用程序将使用LDMA或RDMA接收数据。我希望我们的CLR应用程序使用相同的API,并了解可能会有性能损失。
Windows有Windows Direct,但我还没有看到任何允许.NET应用程序使用它的东西。我还没有看到Windows的真正SDP(套接字直接协议)实现。任何人都知道有任何方法可以实现这一目标吗?
答案 0 :(得分:2)
如果你可以混合使用托管代码和非托管代码,那么你的RDMA实现就是一个库(最好用c ++),它可以完成所有自己的内存管理。
通过P / Invoke或C ++ / CLI包装该库。如果你的api很健谈并且具有带有处理语义的有状态C ++对象,那么在C ++ / CLI中这将更容易和更好。
然后,您将获得低级别的完整RDMA性能,并且当您将一些数据从非托管层复制到托管层时(例如,使其更易于操作),会产生唯一的.Net相关成本。
如果您希望通过为非托管内存中的基础数据提供足够丰富的api,可以避免这种情况。这将导致一些轻微的托管/非托管转换成本,因此对于极其繁琐的界面是不合适的,但避免这种情况的真正原因将是实施的相当大的麻烦所以它肯定不会是我的第一选择与仅仅拉动数据相比想要进入管理世界。
我不认为纯粹的托管解决方案可以在没有危险黑客的情况下使用RDMA(例如,使用LOH是非压缩的)。