Condividi tramite


Supporto di esempio allocato dall'utente

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita da Lettore di origine e Writer sink. Lettore di origine e Writer sink sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi Lettore di origine e Writer sink anziché Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

In circostanze normali, sia l'oggetto lettore che l'oggetto lettore sincrono creano un nuovo oggetto buffer per ogni esempio recapitato all'applicazione. Questo è dovuto al fatto che l'oggetto di lettura non ha modo di sapere cosa fa l'applicazione con gli esempi dopo averli recuperati. Anche se molte applicazioni leggono solo esempi per eseguirne il rendering immediato, alcune applicazioni potrebbero dover mantenere campioni per molto tempo. L'oggetto di lettura non può quindi riutilizzare uno qualsiasi dei buffer allocati; li recapita all'applicazione, che quindi ha il controllo su di essi.

Il problema di questo approccio è che un file può contenere un numero immenso di campioni. Se ognuno di essi richiede la creazione di un nuovo oggetto buffer, il tempo di allocazione e rilascio della memoria è molto elevato. Nelle applicazioni sensibili al tempo, ad esempio i lettori multimediali, questo sovraccarico può essere molto dannoso per le prestazioni.

Per alleviare i problemi di prestazioni degli esempi allocati dal lettore, sia il lettore che il lettore sincrono supportano esempi allocati dall'utente. Per usare esempi allocati dall'applicazione, l'oggetto di lettura effettua chiamate a un metodo di callback di allocazione di esempio implementato. La logica utilizzata dal callback per recapitare i buffer all'oggetto di lettura è interamente disponibile. È possibile usare un pool di buffer per l'intero file o usare più pool di buffer, uno per ogni output o flusso o qualsiasi altro schema che funziona per l'applicazione.

Allocazione dei buffer per la lettura di file

Funzionalità di lettura file