2016-12-30 2 views
1

Ich versuche Bilder von der Festplatte zu laden (Größen von 30 bis 50 MB pro Stück) in einer Liste wie folgtSystem.OutOfMemoryException wenn mehrere große Bilder von der Festplatte geladen

var images = new List<Image>(); 
    foreach (var imgPath in paths) 
    { 
     var img = Image.FromFile(imgPath); 
     images.Add(img); 
    } 

Das Problem ist, dass nach dem ersten oder zweiten Bild erhalte ich eine

System.OutOfMemoryException

... meine Vermutung ist, dass die Bilder zu groß sind. Ich weiß, dass es eine gute Übung wäre, die Bilder einzeln zu verarbeiten, aber ich kann es nicht, da ich sie alle zu einem einzigen zusammenführen muss (wie eine Collage), und ich kann keine Vorschaubilder verwenden, weil ich es brauche respektiere die Originalgrößen.

Ich versuchte, die maxRequestLength zu "10000000" zu ändern, aber es war nutzlos.

Da ich den Bildverarbeitungsschritt nicht erreichen kann glaube ich nicht, dass ich ein Problem damit habe Objekte nicht zu entsorgen, zumindest noch nicht.

Gibt es eine Möglichkeit, den verfügbaren Arbeitsspeicher zu vergrößern, oder etwas in der Art?

P.S. Ich verwende das JPG-Format für Bilder.

+1

Sind Sie sicher, dass es nach _ "das erste oder zweite Bild" _? _ "30 bis 50 MB pro Stück" _ - ist winzig. Wenn ich jetzt Google Chome anschaue, benutze ich ** 129 MB ** zum Vergleich. Haben Sie versucht, die Speicherverlust-Tools in VS auszuführen? – MickyD

+2

Was hat 'maxRequestLength' zu tun mit _" Bilder von Diskette laden "_? – MickyD

+0

Es gibt zu viele Variablen, die Ihnen helfen können, z. B. Hardwarekonfiguration, Betriebssystem, Anwendungstyp, Anwendungskonfiguration. Offensichtlich müssen Sie den für Ihre Anwendung verfügbaren Speicher vergrößern, aber es ist sehr schwierig zu sagen, wie dies zu erreichen ist. –

Antwort

0

Ich empfehle nicht mit:

Image.FromFile(path); 

Es ist langsam und wird Ihr Prozess Statt aufblasen:

var fs = new FileStream(path, FileMode.Open, FileAccess.Read); 
var photo = Image.FromStream(fs, true, false); 

nicht ;-)

Grundsätzlich zu entsorgen Vergessen statt alle diese Daten auf einmal in den Speicher zu bringen und deine App und all deine Lieben zu töten. Sie betreiben das Bild, als wäre es ein Datenstrom.

bearbeiten

In jedem Fall empfehle ich nicht alle Bilder auf einmal bearbeiten. Sie erhalten wahrscheinlich eine OutOfMemoryException in beide Richtungen.

Wenn möglich, arbeiten Sie mit zwei Bildern gleichzeitig, wenn Sie fertig sind, entsorgen Sie sie und gehen Sie zum nächsten Set, bis das fertige Bild fertig ist.

Verwandte Themen