Пример #1
0
            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);
            }
Пример #2
0
 public static void AddMemoryInfo(MemoryInfo _memoryInfo)
 {
     lock (MemoryInfQueue)
     {
         if (MemoryInfQueue.Count > QueMax)
         {
             _memoryInfo.Handle.Free();
         }
         else
         {
             MemoryInfQueue.Enqueue(_memoryInfo);
         }
     }
 }