Tjenare! Min teori är att den senare bilden är hårdare packade, och att den i uppackat format är större än den första bilden. Det är ju en bitmap, dvs. varenda pixel ska in i minnet. Ja, din teori skulle kunna stämma. Saken är ju den att jag inte vill sänka kvalitén. Bilden som laddas upp skall användas vid tryck och måste därför ha en hög kvalité. Många webbhotell sätter begränsning på heapen, per webbapplikation. Så hur stor heap behöver min app? Hur kan jag ta reda på det för att sedan kunna jämföra detta med vad jag erbjudas av mitt webbhotell? Men vad tror ni annars om koden? Kan det finnas något som är galet i koden? Verkar inte vara fel på koden. Testa att köra lokalt och kolla hur mycket ram som används och så. Jag får ta kontakt med dem helt enkelt. Jag hade samma problem för ett tag sedan på just loopia. min "förminska bilder funktion" började haverera när kunden hade köpt ny kamera med högre upplösning. Bilden laddades upp, men förminskades aldrig, vilket ledde till en massa följdfel.System.OutOfMemoryException | filuppladdning
Här har jag en nöt till forumets läsare. Jag begriper inte varför jag får detta fel:
System.OutOfMemoryException: Out of memory. at System.Drawing.Bitmap..ctor(Stream stream)
Problemet:
Ovan fel uppenbarar sig i en hostad miljö hos Loopia, inte i lokal utvecklingsmiljö.
Beskrivning:
Initialt har en fil (bild) laddats upp på servern. Inga problem här.
Problemet uppstår i steget därefter. När väl filen ligger på servern läser jag in den igen via en FileStream för att utföra vissa operationer på bilden.
Smäller:
Felet (som inte uppenbarar sig lokalt) kastas pekar på raden image = new Bitmap(stream); i nedan kod. Det som är märkligt är att det alltid tycks smälla när jag försöker populera mitt image-objekt, oavsett om jag kör enligt kodstycke 1 eller 2 (se nedan).
Kodstycke 1
FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
byte[] data = new byte[fileStream.Length];
fileStream.Read(data, 0, (int)fileStream.Length);
fileStream.Close();
stream = new MemoryStream(data, false);
image = new Bitmap(stream);
Kodstycke 2
image = Bitmap.FromFile(imagePath, true) as Bitmap;
Empiriskt test:
För att krångla till det, eller förtydliga, så lät jag genomföra ett litet empiriskt test.
Jag har två stycken bilder tagna av två olika kameror.
Bild 1 (äldre kamera) filstorlek 3139 kB -> inga problem alls.
Bild 2 (Nikon D60) filstorlek 2763 kB -> Smäller!!
Så, felet System.OutOfMemoryException kan inte ha något att göra med minneslekage?
Måste på något sätt handla om filen. I båda dessa fall laddas filen upp på servern, men när jag kör image = new Bitmap(stream); så skiter det sig.
Vad kan vara galet? Hoppas forumets läsare kan komma med intressanta, och hjälpsamma, förslag på lösning.
// NickeSv: System.OutOfMemoryException | filuppladdning
Jag vet inte, men går det att på något sätt sänka kvalitén på bilden när du laddar in den? Hur många färger används t.ex.?Sv:System.OutOfMemoryException | filuppladdning
Bild 1 = 2560 x 1920 (72 dpi)
Bild 2 = 2592 x 3872 (300 dpi)
Hur kan jag veta hur mycket ram som används? Och ev vad som är ledigt?
Allt körs ju i en hostad miljö.
// NickeSv: System.OutOfMemoryException | filuppladdning
Annars skulle shared-hosting inte fungera så bra.Sv:System.OutOfMemoryException | filuppladdning
// Nikce Sv: System.OutOfMemoryException | filuppladdning
// nickeSv:System.OutOfMemoryException | filuppladdning
Kontakta ditt webbhotell för att se om de kan hjälpa dig och ge mer utrymme i minnet. Det gjorde mitt webbhotell. Jag hade problem med tappade sessioner pga lågt minne. Blev flyttat till ny server.Sv: System.OutOfMemoryException | filuppladdning
// NickeSv: System.OutOfMemoryException | filuppladdning
Min lösning var att lyfta över förminskningsdelen i en winform-app där han enkelt kunde köra igenom en mapp med bilder och förminska dem till den storlek som används på sidan :)