none
Out of memory exception

    Frage

  • Hallo, beim Erzeugen einer Chartgraphik  im Druckdialog erhalte ich manchmal eine out of memory exception.

    Die Chartgraphik wird abhängig von den Druckdimensionen mittels chart.saveimage generiert. Der Fehler tritt auf, wenn ein besonders großes Druckformat gewählt wird (z.B. A3 Querformat) in der zeile, in der chart.height gesetzt wird:   

    System.OutOfMemoryException: Nicht genügend Arbeitsspeicher.
       bei System.Drawing.Bitmap.Clone(Rectangle rect, PixelFormat format)
       bei System.Windows.Forms.DataVisualization.Charting.ChartArea.PaintCursors(ChartGraphics graph, Boolean cursorOnly)
       bei System.Windows.Forms.DataVisualization.Charting.ChartPicture.Paint(Graphics graph, Boolean paintTopLevelElementOnly)
       bei System.Windows.Forms.DataVisualization.Charting.ChartImage.GetImage(Single resolution)
       bei System.Windows.Forms.DataVisualization.Charting.Chart.SaveImage(Stream imageStream, ChartImageFormat format)
       bei System.Windows.Forms.DataVisualization.Charting.Chart.SaveImage(String imageFileName, ChartImageFormat format)
       bei rms.Pads.MPrinting.GenImage2(RichTextBoxEx& aRtf, Chart& aChart, fmMain& aFm, Int32 DiagWidth, Int32 DiagHeight) in E:\MyData\Visual Studio 2010\Projects\XPadsTrunk\Pads\Main\Printing\MPrinting.vb:Zeile 357.

    Wie kann ich dies verhindern?

    Dienstag, 5. Februar 2013 11:23

Antworten

Alle Antworten

  • Hallo Stefan,

    schau doch einfach mal auf die Speicherauslastung. Wenn Du eine Grafik mit mehreren tausend Pixeln Höhe und Breite erzeugst, kann es schon passieren, dass das so nicht funktioniert.

    Welches Grafikformat gibst Du für die Generierung an?

    Warum tut es nicht eine kleinere Grafik, die dann skaliert wird?

    Wie groß wird die Grafik in deinem Fall?

    Ist deine Anwendung eine 32- oder eine 64-Bit Anwendung?

    Wie viel Speicher hat der Rechner, auf dem die Anwendung ausgeführt wird?

    Es gibt zwar noch einige andere mögliche Fehlerquellen aber bevor man hier was sagen kann, poste bitte man den relevanten Code, u.a. von deiner Method GemImage2.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 5. Februar 2013 11:58
  • Hallo, die Graphik ist typischerweise 1000x500 Pixel bei 32bit also 2Mbyte. Bei 3 Gbyte Ram also nicht sonderlich viel. Die Exception tritt ja auch bei PaintCursors auf, soweit ich das verstehe. Versuche z.Zeit auf aChart.Printing.PrintPaint umzusattteln.

    Dienstag, 5. Februar 2013 12:09
  • mit Chart.Printing.PrintPaint gibt es keine exceptions mehr.
    Mittwoch, 6. Februar 2013 08:39