Ho sperimentato per alcune ore con vari modi per caricare un'immagine da un file. Si prega di dare un'occhiata a questi due metodi:Prestazioni di caricamento dell'immagine
public Image SlowLoad(string path)
{
return Image.FromFile(path);
}
public Image FastLoad(string path)
{
using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path)))
return Image.FromStream(ms);
}
Il secondo metodo è come 2 volte più veloce. Cosa mi manca qui? Perché è così? Non posso credere che gli sviluppatori .NET non possano implementare Image.FromFile più velocemente semplicemente usando il metodo che ho scritto. Quindi => ho sbagliato da qualche parte. Per favore dimmi dove. Perché il secondo metodo è quasi 2 volte più veloce? Il mio codice è completamente corretto? (thread-safe, ecc.). Forse Image.FromFile è più sicuro?
Sei solo misurando il tempo necessario per chiamare il metodo? Potrebbe essere che 'Image.FromFile' esegua un parsing di parsing ecc. Che' Image.FromStream' differisce. Non lo so, ma sto facendo ipotesi - puoi vedere che questo ha un impatto in un'interfaccia utente reale, ad es. che visualizza le immagini? –
Solo un file fyi: [reference.microsoft.com] (http://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Image.cs,f7cc7221ba00597a) –
Il secondo metodo richiede che l'intero file sia caricato in memoria prima di essere letto, che il primo metodo (forse) non ha. Forse Image.FromFile() è ottimizzato per un footprint di memoria insufficiente, in modo tale da caricare solo un piccolo buffer alla volta dal file. – adv12