Synchronisationsproblem - Out of Memory Exception

  • VB.NET
  • .NET 4.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Synchronisationsproblem - Out of Memory Exception

    Hallo zusammen,ich habe folgende Problematik mit meinem Programm:

    Ich habe ein Programm, welches über eine ListView einen beliebigen Ordner anzeigt und von Image Dateien Thumbnails erstellt.

    Wenn ich ein Bild in den Ordner ziehe, wird der Ordner mit dem FileSystemWatcher aktualisiert und das Thumbnail wird geladen.
    Das
    ganze funktioniert auch wunderbar mit einem Dropbox Ordner. Wenn ich
    beispielsweiße mit meinem Smartphone ein Image uploade, wird mir das
    Image nach paar Sekunden angezeigt.

    Jetzt habe ich das gleiche auch mit der Nextcloud getestet, erhalte allerdings eine Out of Memory Exception.
    Was könnte das Problem hierbei sein? Ist die Synchronisation der Nextcloud eventuell zu langsam?
    Die Function wird hierbei nur 6 mal aufgerufen, das kann also nicht am mangelnden Arbeitsspeicher liegen.

    VB.NET-Quellcode

    1. Private Function CreateThumbnail(ByVal sFullPath As String) As Bitmap
    2. ' Originalbild einlesen
    3. Dim orgImg As Image = Image.FromFile(sFullPath)
    4. Dim imgWidth As Integer = orgImg.Width
    5. Dim imgHeight As Integer = orgImg.Height
    6. Dim imgRatio As Single = CSng(imgWidth) / CSng(imgHeight)
    7. Dim maxRatio As Single = CSng(thumbWidth) / CSng(thumbHeight)
    8. ' Skalierung berechnen
    9. If imgRatio <= maxRatio Then
    10. imgWidth = CInt(imgWidth / (imgHeight / thumbHeight))
    11. imgHeight = thumbHeight
    12. Else
    13. imgHeight = CInt(imgHeight / (imgWidth / thumbWidth))
    14. imgWidth = thumbWidth
    15. End If
    16. ' neue Bitmap in der Größe der Thumbnailsmaße erstellen
    17. Dim thumbBmp As New Bitmap(thumbWidth, thumbHeight, PixelFormat.Format24bppRgb)
    18. ' vom neuen Bitmap ein Graphics-Objekt erstellen
    19. Using gra As Graphics = Graphics.FromImage(thumbBmp)
    20. ' div. Optimierungseinstellungen für das Graphics-Objekt
    21. gra.SmoothingMode = SmoothingMode.HighQuality
    22. gra.CompositingQuality = CompositingQuality.HighQuality
    23. gra.InterpolationMode = InterpolationMode.HighQualityBicubic
    24. gra.PixelOffsetMode = PixelOffsetMode.HighQuality
    25. ' Hintergrundfarbe setzen
    26. gra.Clear(ImageList1.TransparentColor)
    27. ' Originalbild korrekt skaliert an die richtige Position zeichnen
    28. gra.DrawImage(orgImg, CInt((thumbWidth / 2) - (imgWidth / 2)),
    29. CInt((thumbHeight / 2) - (imgHeight / 2)),
    30. imgWidth, imgHeight)
    31. ' Originalbild freigeben (keine Dateisperre!)
    32. orgImg.Dispose()
    33. CreateThumbnail = thumbBmp
    34. End Using
    35. End Function


    VB.NET-Quellcode

    1. ' Originalbild einlesen
    2. Dim orgImg As Image = Image.FromFile(sFullPath)


    Hier tritt der Fehler auf.

    Bin sehr Dankbar für jede Hilfe!:)

    Lg
    OutOfMemory bei Image.FromFile ist eigentlich ein Zeichen, dass hinter dem Pfad keine gültige Bilddatei steckt. Probier das mal mit ner EXE und Dir kommt die gleiche Exception. Liegt daran, dass der Dateianfang, in dem bei nem Bild Größeninfos drin sind, bei anderen Dateien anders ist und somit falsch interpretiert werden. Hab ich mal gelesen. Irgendwo. Vor langer Zeit.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Erstmal danke für den Beitrag.

    Das komische ist, dass ich es mit DropBox getestet habe und es völlig egal ist, ob ich eine .jpg oder .png Datei nehme und diese hochlade.
    Die Größe spielt auch überhaupt keine Rolle. Es funktioniert einwandfrei.

    Ich frage mich, was bei der NextCloud anders ist?
    Meine Vermutung ist, dass der FileSystemWatcher die Information langsamer bekommt, als bei der Synchronisation mit der DropBox.
    Ich habe bereits ein Sleep mit 30 Sek. in die onChanged Methode des FSW hinzugefügt, allerdings ohne Erfolg.
    Die Exception bekomme ich dann einfach 30 Sek. später.


    Lg
    Nix mit Sleep. Wenn der FileSystemWatcher "eine Veränderung spürt", dann feuert er doch ein Event. Ruf doch im EventHandler die o.g. Prozedur auf statt nur zu hoffen, dass der FSW fertig ist (btw: Du hast den FSW so eingestellt, dass er erkennt, wenn auch DropBox/NextCloud ne Änderung stattfindet?)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.