调用Marshal.AllocHGlobal必须调用 Marshal.FreeHGlobal(ptr);来手动释放内存,即使调用GC.Collect();方法也无法释放。
Const.MaxLengthOfBufferd的长度固定为0x2000 也就是8192
private bool SendMessage(int messageType, string ip, string port, int length, byte[] messageBytes)
bool result = false;
byte[] a = new byte[]{0,0,0,0};
byte[] b = new byte[] {1,2,3,4};
IntPtr pt =
Mar
sha
l.AllocH
Global
(a.Length);
//从source数组的startIndex下标开始复制length个对象到ptr;
对于整Socket网络通讯的人来说,packet这玩意一定不会陌生.但是要知道此类的字段字节总数,
使用
Mar
sha
l.SizeOf,无疑是一个非常好的选择.这样可以大大节省你计算字节数的时间.
使用
方法:
Mar
sha
l.SizeOf( packet实例 )usingSystem;
usingSystem.Runtime.InteropServices;
usingCMD....
C#
——
Mar
sha
l.StructureToPtr方法简介
http://blog.csdn.net/livelylittlefish/article/details/2423764
具体可以参考http://msdn.microsoft.com。
Vidyo32.VidyoClientInEventLogin Login = new Vidyo32.VidyoClientInEventLogin();
Login.portalUri = this.tbxIP.Text.Trim(); //"http://kaunas.vidyo.scandihealth.net";
Login.us...
```c
sha
rp
public static unsafe void Copy pinnedSourceMemoryBlock, Array destinationArray, int sourceIndex, int destinationIndex, int length;
参数说明:
- `pinnedSourceMemoryBlock`: 需要被pin住的源内存块,通常是从`fixed`缓冲区、`GCHandle.Pinned`创建的对象或`
Mar
sha
l.GetH
Global
()`的结果。
- `destinationArray`: 你可以将数据复制到的目标数组,它可以是任何.NET数组类型。
- `sourceIndex`: 从源内存块开始复制的第一个元素的索引。
- `destinationIndex`: 目标数组中开始复制的位置。
- `length`: 要复制的元素数量。
`
Mar
sha
l.Copy` 主要用于以下场景:
1. 将非托管内存(如从其他语言(如C++)的结构体或缓冲区)的数据复制到托管内存(如.NET数组)。
2. 当需要跨语言共享大型数据块时,由于内存管理的不同,这种方式比直接操作内存更安全。