none
Einstellungen zum Speicherbedarf des IIS RRS feed

  • Allgemeine Diskussion

  • Salü alle zusammen

    Ich bin schon seit längerem an einem Problem, welches mir endlos viel Speicher frisst, zu lösen. Ich habe eine WebAnwendung, sie ist in ASP.NET, programmiert mit VB.NET. Ein Bild Namens THIERSHEIM.jpg ist ca 4 MB gross. Nun habe ich es auf drei Maschinen erlebt, dass unterschiedliche Code-Elemente einen Fehler Memory Overflow bringen. Nun stelle ich mir die Frage: Gibt es beim IIS eine Einstellungsmöglichkeit, wie viel Speicher (RAM) der IIS für eine Webanwendung verwenden darf?

    In einem anderen Trade hatte ich das Problem, dass img As Image = Image.FromStreammms,True,True) zu einem Memory Overflow führte. Hier war die Lösung, dass mit True,Fals das Bild nicht entkomprimiert wird. Ok, gelöst. ABER:

    rcode = vicwin.allocimage(srcimg, jinfo.width, jinfo.length, jinfo.vbitcount) produziert genauso einen Memory Overflow. Das ist jetzt zwar bei Victor Library aber eigentlich das gleiche Problem, Memory Overflow mit dem Bild Thiersheim.jpg.

    Interessant ist es, dass sowohl meine Entwicklermaschine mit 2 GB RAM als auch der Webserver mit 4GB Ram identisch mit Memory Overflow reagieren. Somit schliesse ich ein Hardware Problem aus.

    Das Bild THERSHEIM.jpg ist nicht das einzige Bild das zu einem Memory Overflow führt. Ich habe noch eine Serie weiterer Bilder. Alle meisst grösser als 4MB. Es gibt aber auch ein Bild, das ist 6MB gross und läuft durch allen Code durch. Auch alle kleineren Bilder funktionieren einwandfrei.

    Wenn mit den beiden Codefragmenten jeweils eine Minimal-Anwendung produziere, dann geht der Code auch. Und das finde ich sehr eigenartig (für mich jedenfalls).

    Gibt es aus Sicht des IIS oder von Windows 2008 eine Begrenzung des Speichers, welcher verhindert, dass ich mein Bild entkomprimieren kann und damit halt einige hundert MB benötige?

    Vielen lieben Dank für Eure Inputs
    Gruss Sabrina

    Hier noch der verwendete Code der in meinem Projekt zu Memory Overflow führt:

    Dim sourceImage As Bitmap = Nothing 
    sourceImage = CType(Bitmap.FromStream(uxRadUpload.UploadedFiles(0).InputStream, True, True), Bitmap) '<-- Fehlerhafte Zeile, jetzt neu ValidateImageDate=false
    trueImageWidth = sourceImage.Width
    trueImageHeight = sourceImage.Height
    sourceImage = Nothing
    
          Case ImageFormat.Jpeg
            Dim jinfo As vicwin.JpegData
            rcode = vicwin.jpeginfofrombuffer (inbuff, jinfo)
            If (rcode = vicwin.NO_ERROR) Then
              rcode = vicwin.allocimage(srcimg, jinfo.width, jinfo.length, jinfo.vbitcount) '<-- produziert rcode -14: Insufficient memory
              If (rcode = vicwin.NO_ERROR) Then
                rcode = vicwin.loadjpgfrombuffer (inbuff, srcimg)
              End If
            End If
    Dienstag, 28. Dezember 2010 21:50

Alle Antworten

  • Hallo Sabrina,
    rcode = vicwin.allocimage(srcimg, jinfo.width, jinfo.length, jinfo.vbitcount) produziert genauso einen Memory Overflow. Das ist jetzt zwar bei Victor Library aber eigentlich das gleiche Problem, Memory Overflow mit dem Bild Thiersheim.jpg.

    aber dieses mal ist es eine von dir eingesetzte Komponente eines Drittanbieters. Da wirst Du diesen schon fragen müssen, ob das Problem bekannt ist (ggfs. auf die True/False Übergabe von Image.FromStream hinweisen, ggfs. ist es dort etwas ähnliches) und ob es behoben wird.

    Mit Speichereinstellungen im IIS wirst Du da nichts bewirken.

    Allerdings muss ich gestehen, dass ich relativ viel mit Bildbearbeitung in ASP.NET mache und noch nie auf so ein Problem gestoßen bin. Daher frage ich mich schon, was Du da eigentlich an Bildern mit dir rumschleppst!?

     


    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, 28. Dezember 2010 22:20
    Moderator
  • Hallo Sabrina

    Fragen zu Einstellungen von ASP.NET/IIS/Server2008 gehören in das entsprechende Forum.
      (und da gibt es diverse Einflüsse+Zusammenhänge auf diversen Ebenen)

    Dies ist eine Fortsetzung von Thread:
    http://social.msdn.microsoft.com/Forums/de-DE/dotnetframeworkde/thread/7039367c-1f97-4643-9c3d-e06629df8763/

    Jedoch mit einer OutOfMem Exception
      (im vorherigen Thread wurde klar, dass aus 4MB JPEG Bildern entpackt uU 400-600MB Pixeldaten entstehen, je nach Auflösung und 'Komplexität' des Bildes!)
    ist es eher ein grundsätzliches Problem, die Einstellungen von ASP.NET wirken eher anders.
    Bedenke auch mal, falls gerade mehrere Clients gleichzeitig deine ASP.NET App aufrufen, dann vervielfacht sich das Problem spielend!
    Von daher ist es IMHO teils am falschen Ende gedreht, wenn man bloss mehr Speicher für ASP.NET freigibt.
    Insbesondere kommst du da bald auch in den Bereich, wo 64-Bit  OS/IIS und ASP.NET-Prozesse nötig werden könnten!

    Daher bleibt es bei der elementaren Frage, warum Bitmaps überhaupt entpacken, bzw warum du jetzt 'Victor Library' einsetzt?

    Dienstag, 28. Dezember 2010 22:25
  • Salü Thomas

    Von hinten aufgerollt: Das WebProjekt wurde nicht von mir programmiert, ich durfte es übernehmen und die Fehler des Vorgängers suchen. Victor Library habe ich also angetroffen und "kämpfe" jetzt leider damit. Im Übrigen habe ich den MemoryOverflow in den VicLibs erst festgestellt, als ich das Problem mit der Bitmap Klasse gelöst habe.

    Das mit den mehreren Anwender zeitlgleich habe ich mir auch schon überlegt. Ich wage nicht daran zu denken.

    Der Hintergrund, warum ich nach einer IIS Einstellung frage ist: Auf meiner 2GB Entwicklermaschine und auf dem 4GB Server reagiert das Teil identisch. Daher habe ich Zweifel, dass es am wahren vorhandenen RAM liegen könnte.

    Meine Beobachtung: Erstelle ich mit den Codezeilen, welchen den Memory Overflow produzieren, eine separate Seite ohne alles drumm herum, dann geht das. Also schliesse ich das Bild aus, die Victor Library und auch den Memory Stream mit der Bitmap Klasse.

    Da einige kleinere Bilder gehen und einige grössere nicht und der Fehler Memory Overflow heisst... habe ich das Gefühl, dass es nicht der Code ist.

    Und nicht zuletzt weiss ich einfach nicht genügend über das Zusammenspiel der verschiedenen Komponenten. Insebesondere nichts über den IIS.

    Was soll ich nur tun um das Problem zu lösen?

    Gute Nacht
    Sabrina

    Mittwoch, 29. Dezember 2010 20:53
  • Salü Stefan

    Ich habe das Gefühl, dass die eingesetze Komponente Victor Library einwandfrei funktioniert. Denn wenn ich die Memory Overflow erzeugende Funktion isoliert in einer eigenen Webseite laufen lasse, dann arbeitet die perfekt. Nur in meinem übernommenen Projekt erzeugt sie den Memory Overflow. Und weil ich einen Memory Overflow vorher in der Bitmap Klasse hatte, denke ich (korrigiere mich wenn ich falsch denke) dass es nicht ein Code-Problem sein könnte.

    Ja, die Frage an den Bildern die ich rum schleppe, die frage ich mich auch. Im Gegensatz zu Dir habe ich keine Erfahrung mit Bildern und stehe eigentlich ziemlich hilflos da, mit einem Code den ich nicht selbst geschrieben habe, der einfach nur mal einen Memory Overflow liefert und das bei 4 GB RAM auf dem Server und bei 2GB RAM auf meiner Entwicklermaschine. Und genau das macht mich stutzig. Memory Overflow = zu wenig Speicher. Wenn ich doch nur 2GB Ram habe, müsste dieser Memory Overflow viel früher auftreten als bei einer 4 GB Maschine.

    Zudem habe ich mal geglaubt, dass wenn Windows kein RAM mehr hat, es auszulagern beginnt. Und die Auslagerungsdatei auf dem Server ist riesengross und auf einem Laufwerk mit endlos viel Platz. Aber eben, ich verstehe zu wenig davon und habe eigentlich keine Ahnung mehr wie weiter gehen.

    Den ersten Memory Overflow hatte ich bei der übergabe des Byte Array an die Bitmap Klasse. Das haben wir (sorry, das habt Ihr) gelöst indem das Bild nicht mehr entkomprimiert wird. Was aber sagt Dir Deine Erahrung, ist üblich, dass ein Bild das halt mal kurz 600MB Ram braucht, gleich zu einem Memory Overflow führt bei 4 GB RAM? Und vor allem, wenn es dann doch geht wenn aller Code rundherum weg ist... Und auf zwei unterschiedlichen Maschinen einmal mit 2GB und einmal mit 4GB RAM... gleiches Verhalten... das kann doch nicht mehr das RAM sein, oder doch?

    Gute Nacht
    Sabrina

    Mittwoch, 29. Dezember 2010 21:15
  • Auf meiner 2GB Entwicklermaschine und auf dem 4GB Server reagiert das Teil identisch. Daher habe ich Zweifel, dass es am wahren vorhandenen RAM liegen könnte.

    Sabrina,
    ich gehe mangels Angaben mal davon aus, dass beide Rechner  'nur' 32-Bit Windows sind.
    Und hier gibt es auf diversen Ebenen zahlreiche Hürden die verhindern, dass die 4GB physikalisches RAM auch wirklich bei einer (.NET) App zur freien Verfügung stehen.
    Aus diversen Quellen/Erfahrung beginnt das OutOfMemory-Problem manchmal bereits schon so ab ca. 700-800MB Speicherbelegung per Applikation!
    Nun gibt es durchaus diverse Einstellungen, wo man diese Grenze etwas nach oben schrauben könnte, aber diese müsste man 'manuell' auf jedem Rechner vornehmen (+ zT Reboot), was auch viele Administratoren/Provider nicht gerne sehen.
    Für einen einzelnen/eigenen Rechner OK.
    Du könntest (eigenes Risiko) da ja mal den 3GB Schalter aktivieren:
    http://support.microsoft.com/kb/820108/en

    wobei dies für eine standalone .NET App-EXE nach dem compilieren noch eine nachbehandlung benötigen könnte
    editbin /LARGEADDRESSAWARE <die exe>
    http://stackoverflow.com/questions/1346480/how-to-make-a-net-application-large-address-aware

    Mittwoch, 29. Dezember 2010 21:21
  • Victor Library habe ich also angetroffen und "kämpfe" jetzt leider damit. Im Übrigen habe ich den MemoryOverflow in den VicLibs erst festgestellt, als ich das Problem mit der Bitmap Klasse gelöst habe.

    Sabrina, wenn du wirklich an einer Lösung interessiert bist, dann solltest du uns (nach x Threads und Tagen) mal endlich sagen, warum die Pixel-Daten ausgepackt werden müssen
    Ich habe dir die Berechnungsformel per Beispiel schon im ersten Thread genannt, wie man aus Pixelauflösung (Breite mal Höhe) und mal Farbtiefe (normal 3 oder 4 Bytes) den benötigten Speicher erhält.
    Falls man die ganzen Pixel-Daten auspackt, dann wird genau diese Speichermenge (genauer: Addressraum am Stück) auch benötigt, daran (offenbar so 200-600MB) kann man rein gar nichts ändern.
    Will man den Speicherbedarf wirklich markant reduzieren, dann darf man die Pixel-Daten nicht auspacken, oder zumindest nur stückweise  (zB Zeilenweise/banding).

    Im vorigen Thread sagtest du noch, du brauchst nur die Breite+Höhe des Bildes; aber warum jetzt trotzdem noch die VicLib?
    Die VicLib ist ja eine "Image Processing Library", damit werden typisch Bildinhalte bearbeitet (verändert!). Da wäre sehr wohl Zugriff auf die Pixel-Daten nötig, was in deinem Fall (sehr hohe Bildauflösung) zur definitiven Herausforderung werden kann, wenn die VicLib keine Rücksicht auf Speicherbedarf nimmt.

    Solange die eigentliche Aufgabe der Verarbeitung der Bilder nicht glasklar ist, können wir noch endlos raten und du am Rechner herumschrauben.
    Mittwoch, 29. Dezember 2010 22:08
  • Guten Abend Thomas

    Vielen Dank für den Hinweis mit dem 3GB Schalter. Wenn ich den Artikel richtig gelesen habe, betrifft das nicht Windows 2008 Server, oder doch?

    Und Du hast recht, es sind alles 32Bit Kisten. Meine Windows XP Entwickler Kiste hat 2 GB Ram und läuft unter vmWare auf einer 64Bit Kiste. Jetzt habe ich meiner Kiste das RAM von 2 GB auf 4 GB erhöht. Im Arbeitsplatz->Eigenschaften zeigt mein Win XpPro jetzt 3 GB an. Also ein GB mehr als vorher.

    Und ich habe das gleiche Memory Overflow Problem. Obwohl ich nun 1 GB mehr Ram habe????

    Der Provider sind wir selbst. Es ist unser Server den wir selbst verwalten... Ein Reboot liegt also durchaus drinn.

    Was macht hier richtig Sinn?

    Gute Nacht
    Sabrina

    Mittwoch, 29. Dezember 2010 22:29
  • den 3GB Schalter aktivieren:

    naja, MS hat dies ab Server 2008 / Vista  geändert:
    BCDEDIT
    http://blogs.technet.com/b/askperf/archive/2009/04/03/who-moved-my-3gb.aspx

    BCDEDIT.EXE /Set IncreaseUserVa 2970
    http://msdn.microsoft.com/en-us/library/ff542202.aspx

    Mittwoch, 29. Dezember 2010 22:29
  • Lieber Thomas

    Ja, ich bin an einer Lösung mehr als nur interessiert.

    Nein, die Bilder müssen nicht zwingend ausgepackt werden.

    Die Lösung des Stream an Bitmap mit dem ohne Komprimieren habe ich wie vorgeschlagen eingebaut und dort läuft es nun rund. Das konnte ich an zwei stellen in dem bestehenden Code so lösen an welcher eine Bitmap Klasse verwendet wurde. So konnte ich die Höhe und die Breite des Bildes auslesen und der Code läuft weiter. Und für diese Lösung bin ich Dir und Euch unendlich dankbar.

    Nur im weiteren verlauf des Codes bin ich nun an die Stelle mit der VicLib gestossen. Das ist nicht meine Idee. Und ich habe die VicLib nicht anstelle etwas anderem eingesetzt, sondern sie ist in diesem bestehenden Code einfach vorhanden. Und wenn es hier auch eine Möglichkeit gitb, das ohne auszupacken zu lösen, dann mach ich das umgehend. Nur habe ich noch kein deutschsprachiges Forum von VicLib gefunden. Und auch CodeSearch hat mir noch nicht wirklich weiter geholfen.

    Bitte verzeih mir, wenn ich auf mehr als einer Schiene suche. Ich habe die VicLib Komponente in eine neue ASPX Datei kopiert und nur das Teil laufen lassen welches Memory Overflow bringt. Mein Rechner mit 2 GB hällt das aus. Der Server mit 4 GB auch. Nun habe ich auf meinem Rechner den Arbeitsspeicher von 2 G auf 4 GB erhöht. Im Arbeitsplatz Eigenschaften habe ich jetzt 3 GB. Nach Deiner Rechnung wäre das Bild ja rund 600MB gross, also weniger als der gesmte zusätzliche neue Arbeitsspeicher. Dennoch Memory Overflow? Das verstehe ich einfach nicht.

    Rein theoretisch angenommen, jemand findet einen Weg, die VicLib Passage zu passieren ohne zu dekomprimieren, ich weiss nicht was im weiteren Verlauf des Codes noch alles passieren wird...

    Lieber Thomas, lieber Stefan und alle anderen die hier und in allen anderen Trades mithelfen. Ich möchte Euch meinen Dank ausrichten und sagen, dass ich nicht wüsste, was ich ohne Euch alle tun sollte.

    Ich wünsche Euch allen eine ganz angenehme Nacht
    Gruss Sabrina

    Mittwoch, 29. Dezember 2010 22:45
  • Nur im weiteren verlauf des Codes bin ich nun an die Stelle mit der VicLib gestossen. Das ist nicht meine Idee. Und ich habe die VicLib nicht anstelle etwas anderem eingesetzt, sondern sie ist in diesem bestehenden Code einfach vorhanden. Und wenn es hier auch eine Möglichkeit gitb, das ohne auszupacken zu lösen, dann mach ich das umgehend.


    Sabrina, sorry aber dies ist leider schon wieder keine Antwort zum Kern des Problems...
    Was macht die VicLib überhaupt Produktives in deinem Code?
    Ansonst gehe ich davon aus dass dies geheim ist und hiermit erledigt, keine Hilfe mehr nötig/möglich.

    Donnerstag, 30. Dezember 2010 00:32
  • Im Arbeitsplatz Eigenschaften habe ich jetzt 3 GB. Nach Deiner Rechnung wäre das Bild ja rund 600MB gross, also weniger als der gesmte zusätzliche neue Arbeitsspeicher. Dennoch Memory Overflow? Das verstehe ich einfach nicht.
    Sabrina, willkommen im zuende gehenden 32-Bit Zeitalter.
    Nochmals, hier beginnt aus diversen Gründen das Limit pro App oft bereits bei 700-800MB, egal wieviel RAM physikalisch eingebaut ist, es könnten auch TB (Terabytes) sein, plus gigantische Auslagerungsdatei, nützt rein gar nichts.
     (die technischen Gründe werden dir nichts sagen/helfen)

    Und dieses Limit von 700-800MB ist nur derart knapp über der Pixeldatengrösse von 600MB, dass es rein zufällig manchmal geht und anderswo nicht, gerade je nach übriger 'Speicherbelastung' in deiner App/ASP.NET/IIS/System.

    Wirkung hätte da primär mal obige 3GB bzw IncreaseUserVa - Einstellung, damit könnte jenes Limit auf vielleicht 1800MB angehoben werden.
    Aber nochmals, ich fände es besser wenn man die Pixeldaten von 600MB vermeidet, anstelle am System schraubt.

    Donnerstag, 30. Dezember 2010 01:17
  • Salü Thomas

    Bitte verzeih, ich will Dich keinesfalls verärgern. Ich hatte gestern noch ein Post geschrieben mit mehr Infos über den Ablauf im Code, das ist aber hier irgendwie nicht angekommen. Das fällt mir nicht zum ersten Mal auf, dass ein von mir gesendetes Post nicht erscheint. Aber Egal, ich schreib nochmal.

    Also, zuerst wurde das Bild mit einem Stream upgeloadet und an die Image Klasse übergeben um daraus Höhe und Breite auszulesen. Das wurde im Code gebraucht um irgendwie die Seitenverhältnise richtig dar zu stellen. Das haben wir verdankenswerterweise gelöst indem wir nicht mehr entkomprimieren. Gleichartige Codestelle ist dann später im Code nochmals erschienen einfach ein klein bischen anders aber wiederum Stream an Bitmap. Ich habe wie von Dir gelernt ohne Komprimieren geflickt und diese beiden Codestellen laufen nun.

    Später im gleichen Code wird das Bild nun mit Hilfe der VicLib gedreht und beschnitten. Dies ist, wie auch das vorherige, bestendender Code welchen ich übernommen habe und jetzt die Fehler flicken darf. Also nicht von mir erfunden und kein Ersatz für irgend etwas, sondern einfach die nächste Passage.

    Geheim ist übrigens gar nichts. http://test.kartenwerk.ch gibt Dir einen kleinen Einblick was da alles passiert. Beliebige Karte anklicken, Karte bearbeiten anklicken, Text für Bildupload anklicken und dann, ja dann... je nach Bild. Ich habe die "Crash-Bilder" unter http://test.kartenwerk.ch/0testimage gespeichert. Es sind dies:

    Das Bild Thiersheim ist, glaube ich, aufgrund seiner Art nicht relevant. Mit entpackt 1,6GB auch nicht interessant.

    Ich habe jetzt mal ein bischen Statistik betrieben und im Code folgendes eingebaut:

          Case ImageFormat.Jpeg
            'srcimg SourceImage as viclib.wicwin.imgdes
            'inbuff as Integer
            'imgdes könnte der Bild-Puffer sein
    
            Dim jinfo As vicwin.JpegData
    
            'The jpeginfofrombuffer function reads JPEG header data from memory holding JPEG file data and places the image information in the jinfo structure. 
            rcode = vicwin.jpeginfofrombuffer(inbuff, jinfo)
            If (rcode = vicwin.NO_ERROR) Then
    
              'Auswertung des Speicherverbrauch
              Dim vNotwendig As Int64
              ' width=Image Buffer width, vbitcont = Bits per pixel (1,8,16,24 or 32)
              vNotwendig = (jinfo.width * jinfo.length * jinfo.vbitcount)
    
              Dim freeMem As PerformanceCounter
              freeMem = New PerformanceCounter("Memory", "Available Bytes")
              Dim vFreiBytes As Int64 = Convert.ToInt64(freeMem.NextValue)
    
              Dim vDifferenz = vFreiBytes - vNotwendig
    
              Dim vMeldung As String = " Diff: " + vDifferenz.ToString()
              vMeldung += " Frei: " + vFreiBytes.ToString()
              vMeldung += " Nötig: " + vNotwendig.ToString()
    
              Kartenwerk.Konfiguration.Fehlermeldung = vMeldung
    
    
              'The allocimage function allocates space for an image as a DIB. The memory allocated is sufficient to hold the BITMAPINFOHEADER header, palette, and image data of the DIB. The width, length, and vbitcount parameters determine the amount of memory allocated.
              rcode = vicwin.allocimage(srcimg, jinfo.width, jinfo.length, jinfo.vbitcount) '<-- produziert rcode -14: Insufficient memory
    
              If (rcode = vicwin.NO_ERROR) Then
                'The loadjpgfrombuffer function loads image data from memory holding JPEG file data into an area in an image buffer defined by the image descriptor. The JPEG file header includes the image dimensions. If these dimensions do not match the dimensions of the area defined by the image descriptor, the smaller of the two will be used to load the file.
                rcode = vicwin.loadjpgfrombuffer(inbuff, srcimg)
              End If
            End If
    
    

     

    Ich ermittle also mit dem PerformanceCounter den freien Speicherplatz und in vNotwendig berechne ich, wie viel Platz das Bild brauchen würde. x mal y mal Farbtiefe. Und weisst Du, was dabei raus kommt?

    Bild Klassenfoto
    Dif.:   707'401'728
    Frei:   995'401'728
    Nötig: 288'000'000

    Bild Audi
    Dif.:   488'456'192
    Frei:   993'087'488
    Nötig: 504'631'296

    Angenommen, der mathematische Dreisatz hat hier noch Gültigkeit, dann würde meine Wenigkeit verstehen, dass ich beim Bild Audi 995 frei habe, 288 brauche somit ein Rest von 707 übrig bleibt. Das wäre doch noch lange nicht Overflow? Oder rechne ich falsch?

    Ich suche noch immer ein deutschsprachiges Forum für die Victor Library. Kennt jemand etwas?

    Sei herzlichst gegrüsst
    Sabrina

     

    Donnerstag, 30. Dezember 2010 13:16
  • Hallo Sabrina,

    Später im gleichen Code wird das Bild nun mit Hilfe der VicLib gedreht und beschnitten. Dies ist, wie auch das vorherige, bestendender Code welchen ich übernommen habe und jetzt die Fehler flicken darf. Also nicht von mir erfunden und kein Ersatz für irgend etwas, sondern einfach die nächste Passage.

    ich glaube, Du gehst einfach falsch an die Sache bzw. die Antworten hier ran. Wenn das Problem mit den .NET eigenen Klassen erfolgreich umgangen werden kann und mit der anderen Library nicht würde ich schon behaupten, dass es an der Library bzw. deren Code liegt. Das muss nicht unbedingt ein Fehler in der Library sein (spät. bei der Bildmanipulation muss ja eh entpackt werden) aber es ändert nichts an der Tatsache, dass sich das Problem so wohl nicht lösen lässt.

    Wenn Du auf die Library nicht verzichten kannst/willst, musst Du wohl den Hersteller fragen, ob es eine Lösung dafür gibt.

    Das Rechnen mit Speicherbedarf, ... bringt relativ wenig, da es keine absoluten Grenzen für einen Memory Overflow gibt. Es reicht, wenn irgendein andere Prozess kurzfristig mehr Speicher anfordert und deine Anwendung dann halt weniger erhält. Das ist dann ggfs. nicht mal von dir messbar, weil sich das auch im Milisekundentakt ändern kann.

    Ich würde dir empfehlen, deine Anwendung mit den Problembildern mal auf einem x64 System mit ausreichend RAM zu testen. Wenn das Problem dort nicht auftritt, hast Du zumindest die Ursache gefunden.

     


    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
    Donnerstag, 30. Dezember 2010 13:45
    Moderator
  • Bild Audi
    Nötig: 504'631'296
    Oder rechne ich falsch?

    Sabrina, ja da ist ein Rechenfehler: du rechnest Bits aber vergleichst mit Bytes (Faktor 8 daneben).
    Farbtiefe 24 Bits-pro-Pixel bedeutet  3 Bytes-pro-Pixel.
    Bild 'Audi_E-Tron.jpg' benötigt:  5616 * 3744 * 3 = 63078912 Bytes, also ca 60MB.
    Donnerstag, 30. Dezember 2010 13:57
  • Frei:   993'087'488

    Sabrina, nochmals, diesen systemweiten Wert von fast 1GB physikalisch frei kannst du unter 32-Bit glatt ignorieren,
    es gibt hier eben Limiten pro Prozess die trotzdem zuschlagen.

    Halt technisch:
    es geht hier oft zuerst um die Fragmentierung des virtuellen Adressraums,
    der default von 2GB ist heute oft bereits so stark 'zerstückelt',
    dass es schlicht keinen Freiraum mehr hat, um einige 100MB an-einem-Stück zu addressieren. Dies ergibt bereits eine OutOfMemory Exception, auch wenn viele GB RAM noch frei wären!
    Dagegen hilft teils der von mir mehrfach genannte 3GB bzw IncreaseUserVa  Systemschalter, oder eben ultimativ ein 64-Bit OS (und .NET)

    Donnerstag, 30. Dezember 2010 14:23
  • Hallo Sabrina,

    ohne den jetzt schon etwas länger gewordenen Thread komplett durchzulesen, ob es bereits einen Lösungsansatz gibt...

    bei einem ähnlichen Problem (Bitmaps bearbeiten unter ASP.Net wirft einen Memory Overflow) hat es mir geholfen, die fragliche Anwendung in einen eigenen Pool zu legen. Seitdem keine Memory Overflow mehr. (Toi toi toi dreimal auf Holz klopf)

     

    mfg Chris


    Christian Stüben Bedenke immer, die Welt ist eine flache Scheibe. www.haifischbar.com
    Donnerstag, 30. Dezember 2010 15:18