Esta documentación está archivada y no tiene mantenimiento.

UnmanagedMemoryStream (Clase)

Actualización: noviembre 2007

Proporciona acceso a los bloques de memoria no administrada desde el código administrado.

Esta API no es compatible con CLS. 

Espacio de nombres:  System.IO
Ensamblado:  mscorlib (en mscorlib.dll)

[CLSCompliantAttribute(false)]
public class UnmanagedMemoryStream : Stream
/** @attribute CLSCompliantAttribute(false) */
public class UnmanagedMemoryStream extends Stream
public class UnmanagedMemoryStream extends Stream

Esta clase admite el acceso a la memoria no administrada utilizando el modelo basado en secuencias existente y no requiere copiar al montón el contenido de la memoria no administrada.

En el ejemplo de código siguiente se muestra cómo leer y escribir en una memoria no administrada utilizando la clase UnmanagedMemoryStream. Un bloque de memoria no administrada se asigna o se desasigna mediante la clase Marshal.


// Note: you must compile this sample using the unsafe flag.
// From the command line, type the following: csc sample.cs /unsafe

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

unsafe class TestWriter
{

    static void Main()
	{
		
            // Create some data to read and write.
            byte[] message = UnicodeEncoding.Unicode.GetBytes("Here is some data.");

	    // Allocate a block of unmanaged memory and return an IntPtr object.	
            IntPtr memIntPtr = Marshal.AllocHGlobal(message.Length);

            // Get a byte pointer from the IntPtr object.
            byte* memBytePtr = (byte*) memIntPtr.ToPointer();

            // Create an UnmanagedMemoryStream object using a pointer to unmanaged memory.
            UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Write);

            // Write the data.
            writeStream.Write(message, 0, message.Length);

            // Close the stream.
            writeStream.Close();

            // Create another UnmanagedMemoryStream object using a pointer to unmanaged memory.
            UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Read);

	    // Create a byte array to hold data from unmanaged memory.
            byte[] outMessage = new byte[message.Length];

            // Read from unmanaged memory to the byte array.
            readStream.Read(outMessage, 0, message.Length);

            // Close the stream.
            readStream.Close();

            // Display the data to the console.
            Console.WriteLine(UnicodeEncoding.Unicode.GetString(outMessage));

            // Free the block of unmanaged memory.
            Marshal.FreeHGlobal(memIntPtr);

            Console.ReadLine();
    }
}


System.Object
  System.MarshalByRefObject
    System.IO.Stream
      System.IO.UnmanagedMemoryStream

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0
Mostrar: