【问题标题】:C# StructLayout and disposeC# StructLayout 和处置
【发布时间】:2020-08-12 01:28:51
【问题描述】:

我设计了一个名为 ReceiveBuffer 的 StructLayout,在 ReceiveBuffer 内部,我有一个非托管类型的数组来存储数据。代码如下所示。

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
    public struct ReceiveBuffer
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
        public char[] Data;
    }

我想在这个结构中实现 IDisposable 方法,以便在不需要时正确处理 ReceiveBuffer。我查看了 MSDN 中的一些示例,但大多数情况是在类中使用而不是在结构中使用。我不确定如何在结构中管理它。如何在这样的结构中实现 IDisposible?

【问题讨论】:

标签: c# idisposable structlayout


【解决方案1】:

我有一个非托管类型的数组来存储数据。

不,你没有。它是一个带有 Marshal 指令的托管数组。

我不确定如何在 struct 中管理它。如何在这样的结构中实现 IDisposible?

你没有。首先,由于结构上发生了大量的复制操作,像这样的结构和一次性使用是非常有问题的。其次,您对拥有非托管数组的整个假设是错误的。

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 2010-10-24
    • 2012-05-05
    • 2018-10-03
    • 2018-01-04
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多