2016-09-27 2 views
0

Ich habe Probleme mit der Magick.NET-Bibliothek, da beim Konvertieren von Bilddateien in PDFs meine Speicherbelegung über 4 GB beträgt und die CPU-Auslastung 100% beträgt. Wenn die Konvertierung abgeschlossen ist, wird alles normal fortgesetzt. aber da ich diese bestimmte dritte Partei in vielen Fällen einer Anwendung verwende, verursacht es großen Gedächtnisverlust.Magick.NET C# - riesige Speichernutzung

Problem existiert in Zeile images.Write (newPdfPath);

using (MagickImageCollection images = new MagickImageCollection()) 
     { 
      images.Read(orginalImage); 

      images.Write(newPdfPath); 
     } 

Die Bilder sind verschiedene Größen, und es spielt keine Rolle, wie groß, wie bei der Konvertierung von jpg Größe 7 KB das Problem existiert auch.

Bitte helfen Sie !!!!

+1

Wie groß sind die Bilder? Vielleicht kann [diese] (http://stackoverflow.com/questions/34737302/memory-consumption-in-magick-net) Ihnen eine Erklärung geben. –

+0

Wie können wir mit so wenig Informationen helfen? – TaW

+0

posten Sie den Code, in dem Sie die Bilder verarbeiten. – raven

Antwort

1

Die CPU- und Speicherzuweisungen beziehen sich nicht auf die Größe des Images auf Ihrer Festplatte. Es hängt vollständig von der Anzahl der Pixel ab, die Sie haben. Wenn Sie ein vollständig weißes Bild von 20.000 Pixel bis 20.000 Pixel haben, kann die Größe dieser Datei auf Ihrer Festplatte 6 MG betragen, aber wenn Sie sie mit Magick.net in den Speicher laden, beträgt sie Gigabytes. Zuerst müssen Sie sehen, welche Größe (in Pixeln) die Bilder haben und dann können wir über die Leistung entscheiden. Dann können Sie diese Ansätze verwenden, um die Leistung zu verbessern:

Sobald Sie das Bild in den Speicher laden, können Sie es auf HDD mit .mpc Format schreiben und dann können Sie es sehr schnell in den Speicher laden. (Wenn Sie einige Male um Ihre Bilder laden müssen)

Verwenden Magikc.net q8 statt q16

wenn Sie den Befehl auf einer parallelen Schleife laufen kann dann 7 Magick.net Version kann fast 4-mal schneller laufen .

und wie die andere Antwort sagt, müssen Sie Ihr Bild entsorgen, wenn es fertig ist.

0

Wenn Sie Bilder in einer Schleife konvertieren und dann jedes Bild nach der Konvertierung löschen, kann es hilfreich sein. Verwenden Sie die Methode

Methode, um nicht verwaltete Speicherressourcen, die von Bildern verwendet werden, freizugeben.

+0

Die Disposition wird für Bilder nicht benötigt. 'images'variable wird in einer 'using'-Anweisung deklariert, die' Dispose' am Ende der 'using'-Anweisung aufruft. –

+0

Will, rufen Sie Dispose() auf, aber es bedeutet nicht, dass es in diesem Moment entsorgt wird. – BrightShadow