/// <summary> /// Frees the block of memory allocated by AllocateExecutable(). /// </summary> /// <param name="hMem">The block to free.</param> /// <param name="size">The size of the allocated block.</param> public static void FreeExecutable(IntPtr hMem, long size) { if (!SafeNativeMethods.VirtualFree(hMem, UIntPtr.Zero, NativeConstants.MEM_RELEASE)) { int error = Marshal.GetLastWin32Error(); throw new InvalidOperationException("VirtualFree returned an error: " + error.ToString(CultureInfo.InvariantCulture)); } if (size > 0L) { MemoryPressureManager.RemoveMemoryPressure(size); } }
/// <summary> /// Frees a block of memory previous allocated with AllocateLarge(). /// </summary> /// <param name="block">The block to free.</param> /// <param name="bytes">The size of the block.</param> public static void FreeLarge(IntPtr block, ulong bytes) { if (!SafeNativeMethods.VirtualFree(block, UIntPtr.Zero, NativeConstants.MEM_RELEASE)) { int error = Marshal.GetLastWin32Error(); throw new InvalidOperationException("VirtualFree returned an error: " + error.ToString(CultureInfo.InvariantCulture)); } if (bytes > 0) { MemoryPressureManager.RemoveMemoryPressure((long)bytes); } }