C#/ .NET:用于联网的UnmanagedMemoryStream?

我正在考虑使用UnmanagedMemoryStream而不是MemoryStream来处理网络服务器中的传入(也可能是传出?)数据包。我希望实现的是减少值的复制,如果可能的话,避免复制到堆(太多)。 例如,对于传入的数据包,可以执行以下操作:
fixed (byte* p = &data) // where data comes from a socket receive
{
    using (var stream = new UnmanagedMemoryStream(p, data.Length))
    {
        // do handling here...
    }
}
不过,我不太确定这样做是否有任何实际好处。任何人都可以得到一些反馈,关于这样做是否有任何价值,而不是使用好的旧托管MemoryStream? 提前致谢。     
已邀请:
不,你没有改善现有的东西。 byte []是引用类型。您只需将其传递给MemoryStream(byte [])构造函数,就不会复制任何数据。 MS只是存储对同一数组的引用。 事实上,你把它变得更糟,因为你固定了阵列。让垃圾收集在你的代码片段内部运行是不可能的,你正在从数组中读取东西,并且可能正在从数据,字符串和什么不是创建对象。垃圾收集器需要在固定阵列周围工作,使其寿命更加困难。这实际上可能会影响程序的性能一段时间,压缩堆对于提高CPU缓存效率非常重要。     
这听起来像对我来说过早优化。您是否使用过MemoryStream并进行了一些分析,以证明它导致了有形的,可测量的性能问题? 我会坚持使用传统的MemoryStream并为自己省去头痛,直到明显(通过分析)有必要改变。     

要回复问题请先登录注册