C# StructLayout 和处置
C# StructLayout and dispose
我设计了一个名为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 中的一些示例,但大多数情况都用于 class 而不是结构。我不确定如何在结构中管理它。如何在这种结构中实现 IDisposible?
I have an unmanaged type of array to store data.
不,你没有。它是一个带有 Marshal 指令的托管数组。
I'm not sure how to manage that in struct. How do I implement IDisposible in such struct?
你没有。首先,由于在结构上发生了大量复制操作,因此像这样的结构和一次性结构非常有问题。其次,您对非托管数组的整个假设是错误的。
我设计了一个名为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 中的一些示例,但大多数情况都用于 class 而不是结构。我不确定如何在结构中管理它。如何在这种结构中实现 IDisposible?
I have an unmanaged type of array to store data.
不,你没有。它是一个带有 Marshal 指令的托管数组。
I'm not sure how to manage that in struct. How do I implement IDisposible in such struct?
你没有。首先,由于在结构上发生了大量复制操作,因此像这样的结构和一次性结构非常有问题。其次,您对非托管数组的整个假设是错误的。