public static MemoryInfo GetMemoryInfo() { MemoryInfo result; lock (MemoryInfQueue) { if (MemoryInfQueue.Count < 1) { for (int i = 0; i < 10; i++) { byte[] array = new byte[BufferSize]; GCHandle handle = GCHandle.Alloc(array, GCHandleType.Pinned); MemoryInfo item = new MemoryInfo { Buffer = array, Handle = handle, AddrOfBuffer = handle.AddrOfPinnedObject() }; MemoryInfQueue.Enqueue(item); } } result = MemoryInfQueue.Dequeue(); } return(result); }
public static void AddMemoryInfo(MemoryInfo _memoryInfo) { lock (MemoryInfQueue) { if (MemoryInfQueue.Count > QueMax) { _memoryInfo.Handle.Free(); } else { MemoryInfQueue.Enqueue(_memoryInfo); } } }