コード例 #1
0
        public virtual void Close()
        {
            if (IsOwnerOfSharedMemory && View != null)
            {
                // Indicates to any open instances that the owner is no longer open
#pragma warning disable 0420 // ignore ref to volatile warning - Interlocked API
                Interlocked.Exchange(ref Header->Shutdown, 1);
#pragma warning restore 0420
            }

            DoClose();

            if (View != null)
            {
                View.SafeMemoryMappedViewHandle.ReleaseIntPtr();
                View.Dispose();
            }
            if (Mmf != null)
            {
                Mmf.Dispose();
            }

            Header         = null;
            ViewPtr        = null;
            BufferStartPtr = null;
            View           = null;
            Mmf            = null;
        }
コード例 #2
0
 protected void CreateView()
 {
     View = Mmf.CreateViewAccessor(0, SharedMemorySize, MemoryMappedFileAccess.ReadWrite);
     View.SafeMemoryMappedViewHandle.AcquireIntPtr(ref ViewPtr);
     Header = (StockHeader *)(ViewPtr + HeaderOffset);
     if (!IsOwnerOfSharedMemory)
     {
         BufferStartPtr = ViewPtr + HeaderOffset + Marshal.SizeOf(typeof(StockHeader));
     }
     else
     {
         BufferStartPtr = ViewPtr + BufferOffset;
     }
 }
コード例 #3
0
        public void PreReadHeader()
        {
            using (MemoryMappedViewAccessor headerView =
                       Mmf.CreateViewAccessor(0, HeaderOffset + Marshal.SizeOf(typeof(StockHeader)), MemoryMappedFileAccess.Read))
            {
                byte *headerPtr = null;

                headerView.SafeMemoryMappedViewHandle.AcquireIntPtr(ref headerPtr);
                StockHeader *_header    = (StockHeader *)(headerPtr + HeaderOffset);
                StockHeader  header     = (StockHeader)Marshal.PtrToStructure((IntPtr)_header, typeof(StockHeader));
                int          headerSize = Marshal.SizeOf(typeof(StockHeader));
                BufferSize   = header.SharedMemorySize - headerSize;
                UsedSize     = header.UsedMemorySize - headerSize;
                FreeSize     = header.FreeMemorySize - headerSize;
                ItemCapacity = header.ItemCapacity;
                ItemSize     = header.ItemSize;
                ItemCount    = header.ItemCount;
                StockId      = header.StockId;
                SectorId     = header.SectorId;
                headerView.SafeMemoryMappedViewHandle.ReleaseIntPtr();
            }
        }