3

我希望能够在基于 Windows CLR 的应用程序 (.NET) 上使用 LDMA 或 RDMA。我有使用 C++ 开发的低延迟应用程序,这些应用程序将使用 LDMA 或 RDMA 接收它们的数据。我希望我们的 CLR 应用程序使用相同的 API,并理解可能会影响性能。

Windows 有 Windows Direct,但我还没有看到任何允许 .NET 应用程序使用它的东西。我还没有看到真正的 Windows 的 SDP(套接字直接协议)实现。任何人都知道有什么方法可以做到这一点?

4

1 回答 1

2

如果您可以混合托管和非托管代码,请让您的 RDMA 实现成为一个库(最好在 c++ 中),它自己进行所有的内存管理。

通过 P/Invoke 或 C++/CLI 包装该库。如果你的 api 很健谈并且有状态的 C++ 对象和处理语义,这在 C++/CLI 中会更容易和更好。

然后,您可以在低级别获得完整的 RDMA 性能,并且当您将一些数据从非托管层复制到托管层时(例如,使其更易于操作),就会产生唯一的 .Net 相关成本。

如果您愿意,可以通过为非托管内存中的底层数据提供足够丰富的 api 来避免这种情况。这将产生一些轻微的托管/非托管转换成本,因此对于一个非常健谈的界面是不合适的,但避免这种情况的真正原因是实施起来相当麻烦,因此与仅提取数据相比,它肯定不是我的首选你想进入托管世界。

我不会想到一个纯托管解决方案可以在没有危险黑客攻击的情况下与 RDMA 一起使用(例如,使用未压缩的 LOH)。

于 2009-08-30T07:34:26.287 回答