Ich arbeite derzeit an einer App, mit der der Benutzer durch eine Reihe von lokalen Bildern (automatisch scrollen) können. Normalerweise werden fünf oder sechs gleichzeitig auf dem Bildschirm angezeigt.Beschleunigen das Laden eines Bildes von der Festplatte in einer Windows Forms (C# .net) App
Der größte Engpass im Moment scheint das tatsächliche Laden der Bilddaten von der Festplatte zu sein. Ein Timer-Thread verlangt, dass die Bilder alle 1/6 Sekunden aktualisiert werden und die App versucht, mit dieser Geschwindigkeit Schritt zu halten. Jedes Bild ist um 25Kb.
Ich habe versucht, einen rollenden Cache zu erstellen, um Bilder zu laden und zu laden, aber das wurde auch von sich selbst eingeholt, so dass es letztendlich genauso langsam wurde.
Jeder Takt der Timer, ich bin durch die sechs Bild Platzhalter Looping das nächste Bild Laden der Standard
Image img = Image.FromFile("filename");
Methode aber dachte, jemand von einem schnelleren Weg kennen könnten die Bilder aus Platte zu erhalten.
Es gibt zwischen 500 und 20.000 Bilder in jedem der sechs Sätze, so dass es zu groß ist, um das Ganze am Anfang in den Speicher zu laden.
Wenn jemand Vorschläge für einen schnelleren Weg hat, diese Bilder durchzuziehen, würde es sehr geschätzt werden.
Bearbeiten, um weitere Details des Anwendungsflusses hinzuzufügen.
Okay, das ist, was passiert:
User-Hits 'Play' -Taste. Der Timer-Thread beginnt mit einem Timeout von 1/6 Sekunden.
Timer Rückruf:
Update image index (_index++)
for each viewer in list of visible viewers (the forms to display images)
{
get the filename from the id stored in the viewer
check to see if the file exists
if it does exist,
create new bitmap from image
and return that image
otherwise return null
if returned image isn't null, display it on screen
}
, die über ein paar Schichten offensichtlich los ist - das Bild Belastung geht in die Schichtdienste und dann geht dies bis zur Präsentation und dann auf der Benutzeroberfläche, aber das ist der Kern dessen, was geschieht, .
Ich schrieb eine schnelle Test-App, um dies zu testen, und der ImageFast ist um 11 Millionen Ticks schneller. Die Aus-Datei des Bildes benötigt 19 Millionen, während die ImageFast nur 7 Millionen benötigt. –
Danke für die Testergebnisse, David :) – bernhof
Kein Problem. Ich mag die ImageFast-Ergebnisse. –