Przez kilka godzin eksperymentowałem z różnymi sposobami załadowania obrazu z pliku. Proszę spojrzeć na te dwie metody:Wydajność wczytywania obrazów
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);
}
Druga metoda jest 2 razy szybsza. Czego tu mi brakuje? Dlaczego tak jest? Nie mogę uwierzyć, że programiści .NET nie mogliby szybciej zaimplementować Image.FromFile przy użyciu metody, którą napisałem. So => Gdzieś się mylę. Powiedz mi gdzie. Dlaczego druga metoda jest prawie 2 razy szybsza? Czy mój kod jest w pełni poprawny? (wątek bezpieczny, itp.). Może Image.FromFile jest bardziej bezpieczny?
Czy jesteś tylko pomiar czasu zadzwonić do metody? Może się zdarzyć, że 'Image.FromFile' zrobi parsowanie etc, które' Image.FromStream' odstrasza. Nie wiem, ale spekuluję - czy widzisz, że ma to wpływ na prawdziwy interfejs użytkownika, np. który wyświetla obrazy? –
Tylko fyi: [reference.microsoft.com] (http://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Image.cs,f7cc7221ba00597a) –
Twoja druga metoda wymaga, aby cały plik był ładowane do pamięci przed odczytaniem, czego pierwsza metoda (być może) nie ma. Może Image.FromFile() jest zoptymalizowany pod kątem niskiego zużycia pamięci, tak, że ładuje tylko mały bufor naraz z pliku. – adv12