C# Marshal类的中关于内存资源的释放。求解答!
/// <summary>
/// 转换成字节数组
/// </summary>
/// <returns></returns>
public byte[] ToBytes()
{
byte[] bytes = new byte[DATA_LENTH];
IntPtr pBuf = Marshal.UnsafeAddrOfPinnedArrayElement(bytes,0);
Marshal.StructureToPtr(this,pBuf,true);
return bytes;
}
------------------
如以上函数,可实现将自身对象序列化,但其使用到了非托管的东西,关于这方面的内存释放问题,我不是很懂。
就以上例子而言,是先声明和实例化一个指定长度的数组(这个我晓得它是托管的资源),然后通过Marshal.UnsafeAddrOfPinnedArrayElement获得这个数组在内存中的首地址,再然后将自身对象this移动到该地址,最后返回该数组。数组占用的资源在调用该函数的地方使用后会自动释放,可之前用了Marshal.UnsafeAddrOfPinnedArrayElement获得了首地址,而且还用到了 Marshal.StructureToPtr(将数据从托管对象封送到非托管内存块),那这些资源会自动释放吗?如果不会,那该怎么释放呢?