UnmanagedMemoryStream Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Importante
Questa API non è conforme a CLS.
Fornisce l'accesso a blocchi non gestiti di memoria dal codice gestito.
public ref class UnmanagedMemoryStream : System::IO::Stream
public class UnmanagedMemoryStream : System.IO.Stream
[System.CLSCompliant(false)]
public class UnmanagedMemoryStream : System.IO.Stream
type UnmanagedMemoryStream = class
inherit Stream
[<System.CLSCompliant(false)>]
type UnmanagedMemoryStream = class
inherit Stream
Public Class UnmanagedMemoryStream
Inherits Stream
- Ereditarietà
- Ereditarietà
- Derivato
- Attributi
Esempio
Nell'esempio di codice seguente viene illustrato come leggere e scrivere in memoria non gestita usando la classe UnmanagedMemoryStream. Un blocco di memoria non gestita viene allocato e de-allocato usando la classe 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();
}
}
Commenti
Questa classe supporta l'accesso alla memoria non gestita usando il modello basato su flusso esistente e non richiede che il contenuto nella memoria non gestita venga copiato nell'heap.
Nota
Questo tipo implementa l'interfaccia IDisposable, ma non dispone effettivamente di risorse da eliminare. Ciò significa che non è necessario eliminarlo chiamando direttamente Dispose() o usando un costrutto di linguaggio, ad esempio using
(in C#) o Using
(in Visual Basic).
Costruttori
UnmanagedMemoryStream() |
Inizializza una nuova istanza della classe UnmanagedMemoryStream. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream utilizzando il percorso, la lunghezza della memoria, la quantità totale di memoria e i valori di accesso ai file specificati. |
UnmanagedMemoryStream(Byte*, Int64) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream utilizzando il percorso e la lunghezza di memoria specificati. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro con un offset, una lunghezza e un accesso ai file specificati. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro con un offset e una lunghezza specificati. |
Proprietà
CanRead |
Ottiene un valore che indica se un flusso supporta la lettura. |
CanSeek |
Ottiene un valore che indica se un flusso supporta la ricerca. |
CanTimeout |
Ottiene un valore che determina se il flusso corrente può verificarsi un timeout. (Ereditato da Stream) |
CanWrite |
Ottiene un valore che indica se un flusso supporta la scrittura. |
Capacity |
Ottiene la lunghezza del flusso (dimensione) o la quantità totale di memoria assegnata a un flusso (capacità). |
Length |
Ottiene la lunghezza dei dati in un flusso. |
Position |
Ottiene o imposta la posizione corrente in un flusso. |
PositionPointer |
Ottiene o imposta un puntatore di byte a un flusso in base alla posizione corrente nel flusso. |
ReadTimeout |
Ottiene o imposta un valore, espresso in millisecondi, che determina per quanto tempo il flusso tenterà di leggere prima del timeout. (Ereditato da Stream) |
WriteTimeout |
Ottiene o imposta un valore, espresso in millisecondi, che determina per quanto tempo il flusso tenterà di scrivere prima del timeout. (Ereditato da Stream) |
Metodi
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Avvia un'operazione di lettura asincrona. Prendere invece in considerazione l'uso di ReadAsync(Byte[], Int32, Int32). (Ereditato da Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Avvia un'operazione di scrittura asincrona. Prendere invece in considerazione l'uso di WriteAsync(Byte[], Int32, Int32). (Ereditato da Stream) |
Close() |
Chiude il flusso corrente e rilascia tutte le risorse (ad esempio socket e handle di file) associate al flusso corrente. Invece di chiamare questo metodo, assicurarsi che il flusso sia eliminato correttamente. (Ereditato da Stream) |
CopyTo(Stream, Int32) |
Legge i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione del buffer specificata. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati. (Ereditato da Stream) |
CopyTo(Stream) |
Legge i byte dal flusso corrente e li scrive in un altro flusso. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati. (Ereditato da Stream) |
CopyToAsync(Stream, CancellationToken) |
Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando un token di annullamento specificato. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati. (Ereditato da Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione del buffer e un token di annullamento specificati. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati. (Ereditato da Stream) |
CopyToAsync(Stream, Int32) |
Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione del buffer specificata. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati. (Ereditato da Stream) |
CopyToAsync(Stream) |
Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati. (Ereditato da Stream) |
CreateObjRef(Type) |
Crea un oggetto che contiene tutte le informazioni pertinenti necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto. (Ereditato da MarshalByRefObject) |
CreateWaitHandle() |
Obsoleti.
Obsoleti.
Obsoleti.
Alloca un oggetto WaitHandle. (Ereditato da Stream) |
Dispose() |
Rilascia tutte le risorse usate dal Stream. (Ereditato da Stream) |
Dispose(Boolean) |
Rilascia le risorse non gestite usate dal UnmanagedMemoryStream e, facoltativamente, rilascia le risorse gestite. |
DisposeAsync() |
Rilascia in modo asincrono le risorse non gestite usate dal Stream. (Ereditato da Stream) |
EndRead(IAsyncResult) |
Attende il completamento della lettura asincrona in sospeso. Prendere invece in considerazione l'uso di ReadAsync(Byte[], Int32, Int32). (Ereditato da Stream) |
EndWrite(IAsyncResult) |
Termina un'operazione di scrittura asincrona. Prendere invece in considerazione l'uso di WriteAsync(Byte[], Int32, Int32). (Ereditato da Stream) |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
Flush() |
Esegue l'override del metodo Flush() in modo che non venga eseguita alcuna azione. |
FlushAsync() |
Cancella in modo asincrono tutti i buffer per questo flusso e determina la scrittura di tutti i dati memorizzati nel buffer nel dispositivo sottostante. (Ereditato da Stream) |
FlushAsync(CancellationToken) |
Esegue l'override del metodo FlushAsync(CancellationToken) in modo che l'operazione venga annullata se specificata, ma non viene eseguita alcuna altra azione. |
FlushAsync(CancellationToken) |
Cancella in modo asincrono tutti i buffer per questo flusso, determina la scrittura di tutti i dati memorizzati nel buffer nel dispositivo sottostante e monitora le richieste di annullamento. (Ereditato da Stream) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetLifetimeService() |
Obsoleti.
Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza. (Ereditato da MarshalByRefObject) |
GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
Initialize(Byte*, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream utilizzando un puntatore a una posizione di memoria non gestita. |
Initialize(SafeBuffer, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro con un offset, una lunghezza e un accesso ai file specificati. |
InitializeLifetimeService() |
Obsoleti.
Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza. (Ereditato da MarshalByRefObject) |
MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
MemberwiseClone(Boolean) |
Crea una copia superficiale dell'oggetto MarshalByRefObject corrente. (Ereditato da MarshalByRefObject) |
ObjectInvariant() |
Obsoleti.
Fornisce il supporto per un Contract. (Ereditato da Stream) |
Read(Byte[], Int32, Int32) |
Legge il numero specificato di byte nella matrice specificata. |
Read(Span<Byte>) |
Legge tutti i byte di questo flusso di memoria non gestita nell'intervallo specificato di byte. |
Read(Span<Byte>) |
Quando sottoposto a override in una classe derivata, legge una sequenza di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso in base al numero di byte letti. (Ereditato da Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Legge in modo asincrono il numero specificato di byte nella matrice specificata. |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Legge in modo asincrono una sequenza di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento. (Ereditato da Stream) |
ReadAsync(Byte[], Int32, Int32) |
Legge in modo asincrono una sequenza di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso in base al numero di byte letti. (Ereditato da Stream) |
ReadAsync(Memory<Byte>, CancellationToken) |
Legge in modo asincrono i byte del flusso di memoria non gestito nell'area di memoria. |
ReadAsync(Memory<Byte>, CancellationToken) |
Legge in modo asincrono una sequenza di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento. (Ereditato da Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
Legge almeno un numero minimo di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso in base al numero di byte letti. (Ereditato da Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Legge in modo asincrono almeno un numero minimo di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento. (Ereditato da Stream) |
ReadByte() |
Legge un byte da un flusso e sposta in avanti la posizione all'interno del flusso di un byte oppure restituisce -1 se alla fine del flusso. |
ReadExactly(Byte[], Int32, Int32) |
Legge |
ReadExactly(Span<Byte>) |
Legge i byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso fino a quando il |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Legge in modo asincrono |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Legge in modo asincrono i byte dal flusso corrente, sposta la posizione all'interno del flusso fino a quando il |
Seek(Int64, SeekOrigin) |
Imposta la posizione corrente del flusso corrente sul valore specificato. |
SetLength(Int64) |
Imposta la lunghezza di un flusso su un valore specificato. |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Write(Byte[], Int32, Int32) |
Scrive un blocco di byte nel flusso corrente usando dati da un buffer. |
Write(ReadOnlySpan<Byte>) |
Scrive un blocco di byte nel flusso di memoria non gestito corrente usando i dati dell'intervallo di byte specificato. |
Write(ReadOnlySpan<Byte>) |
Quando sottoposto a override in una classe derivata, scrive una sequenza di byte nel flusso corrente e sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti. (Ereditato da Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Scrive in modo asincrono una sequenza di byte nel flusso corrente, sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti e monitora le richieste di annullamento. |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Scrive in modo asincrono una sequenza di byte nel flusso corrente, sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti e monitora le richieste di annullamento. (Ereditato da Stream) |
WriteAsync(Byte[], Int32, Int32) |
Scrive in modo asincrono una sequenza di byte nel flusso corrente e sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti. (Ereditato da Stream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Scrive in modo asincrono un intervallo di byte nel flusso corrente, sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti e monitora le richieste di annullamento. |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Scrive in modo asincrono una sequenza di byte nel flusso corrente, sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti e monitora le richieste di annullamento. (Ereditato da Stream) |
WriteByte(Byte) |
Scrive un byte nella posizione corrente nel flusso di file. |
Metodi di estensione
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Legge in modo asincrono i byte dal Stream e li scrive nel PipeWriterspecificato usando un token di annullamento. |
AsInputStream(Stream) |
Converte un flusso gestito nelle app .NET per Windows Store in un flusso di input in Windows Runtime. |
AsOutputStream(Stream) |
Converte un flusso gestito nelle app .NET per Windows Store in un flusso di output in Windows Runtime. |
AsRandomAccessStream(Stream) |
Converte il flusso specificato in un flusso di accesso casuale. |
ConfigureAwait(IAsyncDisposable, Boolean) |
Configura il modo in cui verranno eseguite le attese nelle attività restituite da un oggetto eliminabile asincrono. |