Programm zeigt "OutOfMemory"

  • C#
  • .NET (FX) 1.0–2.0

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

    Programm zeigt "OutOfMemory"

    Hallo,
    ich habe eine einfache Slide Show geschrieben. In dieser wird in einer Picturebox alle paar Sekundne ein neues Bild angezeigt.

    Leider kommt nach einiger Zeit eine OutOfMemory Fehlermeldung. Ich finde leider den Fehler nicht. Also wodurch genau dieser Fehler ausgelöst wird. Laut TaskManager nutzt das Programm max. 50MB des RAMs.

    Hier mal der wichtigste Teil aus dem Programm:


    C#-Quellcode

    1. //Wähle Verzeichniss aus für Bilder
    2. private void verzeichnissAuswählenToolStripMenuItem_Click(object sender, EventArgs e)
    3. {
    4. DialogResult result = folderBrowserDialog.ShowDialog();
    5. if (result == DialogResult.OK)
    6. {
    7. Dirpath = folderBrowserDialog.SelectedPath;
    8. Properties.Settings.Default.Pfad = Dirpath.ToString();
    9. Properties.Settings.Default.Save();
    10. }
    11. }
    12. //Erstelle Timer
    13. private void slideshowStartenToolStripMenuItem_Click(object sender, EventArgs e)
    14. {
    15. if(Properties.Settings.Default.Pfad == "")
    16. {
    17. MessageBox.Show("Bitte wählen Sie zuerst ein Verzeichnis aus.");
    18. DialogResult result = folderBrowserDialog.ShowDialog();
    19. if (result == DialogResult.OK)
    20. {
    21. Dirpath = folderBrowserDialog.SelectedPath;
    22. Properties.Settings.Default.Pfad = Dirpath.ToString();
    23. Properties.Settings.Default.Save();
    24. }
    25. }
    26. base.SetVisibleCore(true);
    27. string pfad = Properties.Settings.Default.Pfad;
    28. System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
    29. t.Interval = 1000 * Convert.ToInt32(Properties.Settings.Default.Sekunden); // Intervall
    30. t.Tick += new EventHandler(timer_Tick);
    31. t.Start();
    32. images = Directory.GetFiles(pfad, "*.jpg", SearchOption.AllDirectories);
    33. }



    C#-Quellcode

    1. //Ändere Bild alle X Sekunden
    2. Random random = new Random();
    3. void timer_Tick(object sender, EventArgs e)
    4. {
    5. //Zufallwiedergabe an
    6. if (Properties.Settings.Default.Zufall)
    7. {
    8. int interval = random.Next(0, images.Length);
    9. if (pictureBox1.Image != null)
    10. {
    11. pictureBox1.Image.Dispose();
    12. }
    13. pictureBox1.Image = Image.FromFile(images[interval]);
    14. }
    15. //Zufallwiedergabe aus
    16. else
    17. {
    18. if (pictureBox1.Image != null)
    19. {
    20. pictureBox1.Image.Dispose();
    21. }
    22. pictureBox1.Image = Image.FromFile(images[counter++]);
    23. }
    24. }



    Wäre nett wenn sich jemand mal den Code ansehn könnte und mir einen Tipp gibt. Habe das Projekt im Anhang, benutzt wird Visual Studio 2015.
    Dateien
    • Slide Show.rar

      (2,09 MB, 79 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „King2k7“ ()

    @King2k7 Memory nicht, wohl aber eine IndexOutOfRangeException, weil Du den counter gnadenlos erhöhst, ohne ihn auf die Anzahl der vorhandenen Bilder zu beschränken.

    Dies hilft:

    C#-Quellcode

    1. counter += 1;
    2. if (counter >= images.Length)
    3. {
    4. counter = 0;
    5. }
    6. pictureBox1.Image = Image.FromFile(images[counter]);
    OutOfMemory kam bis jetzt bei mir noch nicht.
    Beim wievielten Bild kam diese Exception bei Dir?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @King2k7 Du musst zunächst den Absturz sicher reproduzieren, und dass nach einer minimalen Laufzeit.
    Dann setz mal die Zeit zwischen zwei Bildern drastisch runter, dann sollte es schneller gehen. Vielleicht suchst Du noch Bilder raus, die sehr groß sind, die kannst Du ja in ein separates Verzeichnis packen.
    Dein Code an sich sieht eigentlich gut aus.

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()