25

Sono nuovo alla programmazione Windows App Store con C# e sto cercando di capire come viene gestita la memoria immagini. La mia app è molto semplice:Come gestire WinRT BitmapImage e Image memory

1) fa riferimento a una bitmap da un file utilizzando un oggetto Windows.UI.Xaml.Media.Imaging.BitmapImage e quindi la utilizza come origine per un oggetto Windows.UI.Xaml.Controls.Image. Nel mio caso l'immagine sul disco ha dimensioni maggiori di quelle che vengono visualizzate sullo schermo, quindi viene ridimensionata dal sistema.

La mia domanda è: come fa WinRT gestire la memoria per l'immagine? Ho usato lo strumento vmmap e vedo nella sezione File mappati c'è una voce per il mio file immagine. Immagino che questo significhi che i byte grezzi per questo file siano completamente caricati in memoria. Poiché questo è un JPG, questi byte devono essere decodificati in pixel byte. Sembra dai miei test che l'impostazione dell'UriSource di BitmapImage non causi effettivamente alcuna elaborazione dal momento che richiede 0 ms e che invece si sta verificando un caricamento lento.

Quindi le domande sono: Quale oggetto è il dominatore dei dati di pixel non graduati non compressi? Quale oggetto è il dominatore per i dati di pixel in scala che vengono disegnati sullo schermo? Ci sono strumenti che possono facilmente mostrarmelo? Nel mondo Java utilizzo lo strumento di analisi della memoria Eclipse. Ho provato a utilizzare PerfView ma i risultati non hanno senso per me, sembra che lo strumento fosse pensato per analizzare le prestazioni.

UPDATE:

Alla conferenza costruire la squadra ha discusso la Windows Performance Toolkit. Non ho mai sentito nessuno parlare PerfView quindi credo che il WPT è l'ultimo e più grande strumento per l'analisi della memoria e prestazioni, ecco un link:

http://msdn.microsoft.com/en-us/performance/cc825801.aspx

+2

C'è un api piuttosto ripida dietro questo, inizia a leggere [qui] (http://msdn.microsoft.com/en-us/library/windows/desktop/ee719902%28v=vs.85%29.aspx) –

+0

Credo che la maggior parte degli oggetti sorgente immagine siano supportati da InMemoryRandomAccessStream o qualcosa di simile. Puoi provare a utilizzare PerfView/PerfMon per cercare di scoprirne un po 'di più. –

+1

Non ricordo esattamente, ma il controllo Image non scala la sorgente in base alle impostazioni della sua dimensione? OSSIA Stai mettendo un controllo in una finestra xaml e l'elemento framework che è il controllo dell'immagine è dimensionato a 800x600 quando l'immagine è realmente 1920x1080? –

risposta

1

Una risposta breve è più probabile "in modo ottimale". Non essendo uno smartass, ci sono solo molti sistemi diversi là fuori. Una menzionata accelerazione hardware, è possibile anche considerare il numero di core, la memoria di visualizzazione, la velocità del disco, la profondità e la risoluzione del bit del monitor, l'elenco potrebbe continuare e continuare.