2009-08-28 56 views
2

我希望能夠在基於Windows CLR的應用程序(.NET)上使用LDMA或RDMA。我有用C++開發的低延遲應用程序,這些應用程序將使用LDMA或RDMA接收他們的數據。我希望我們的CLR應用程序使用相同的API,並且理解可能會出現性能問題。在基於Windows CLR的平臺上是否有任何可用於LDMA或RDMA的機制?

Windows有Windows Direct,但我還沒有看到任何允許.NET應用程序使用它的東西。我還沒有看到Windows的真正SDP(套接字直接協議)實現。任何人都知道有什麼辦法可以做到這一點?

回答

2

如果你確定混合託管代碼和非託管代碼,使你的RDMA實現一個庫(最好用C++),它完成它自己的內存管理。

通過P/Invoke或C++/CLI包裝該庫。如果你的api是健談的,並且具有帶有處理語義的有狀態C++對象,那麼在C++/CLI中這將更容易和更好。

然後,您可以在低級別獲得完整的RDMA性能,並且在從非託管層向受管理層複製一些數據(比如使其更容易操作)時,會產生唯一的.Net關聯成本。

即使這樣可以避免,如果你想通過提供一個足夠豐富的api到非託管內存中的底層數據。這會產生一些輕微的託管/非託管轉換成本,因此對於一個非常健談的界面來說是不適當的,但真正的原因是要避免這種情況會是相當麻煩的實現,所以它肯定不會是我的第一選擇,想要進入托管世界。

我不會想到一個純粹的託管解決方案可以與RDMA協同工作,而不會造成危險的黑客行爲(例如使用LOH非壓縮)。

相關問題