Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Guten Abend werte Kollegen.

Habe mal zwei kleine Fragen bezüglich der Performance meines Programms.

Kurz zu meinem Programm:

Mein Programm spielt Bilder in einer Art Diashow ab. Die Dateien holt sich folgender Codeteil aus einer Listbox:



Sub shows()

        Dim k, s, j, Folder As String

        Dim i As Integer

        Dim LastStrich, PreLastStrich As Integer


            For i = 0 To ListBox1.Items.Count - 1

                k = ListBox1.Items.Item(i)

                s = k

                PictureBox.Image = Image.FromFile(s)


            'Extrahieren des Ordners, in dem die Bilder liegen

            LastStrich = s.LastIndexOf("\")

                j = s.Substring(0, LastStrich - 1)

                PreLastStrich = j.LastIndexOf("\")

                Folder = s.Substring(PreLastStrich + 1, (LastStrich - PreLastStrich) - 1)

            Ordner.Text = Folder


            ' Verzögerung bevor nächstes Bild geladen wird

            Delay(5)


            'Überwachung ob Stop-Befehl gesetzt wurde

            If StopCheck = 1 Then

                Exit For

            End If


        Next

        Exit Sub

    End Sub


Wenn das Programm läuft, kann ich im Task-Manager verfolgen, wie bei jedem Bildwechsel die Speichernutzung um die Größe des nächsten geladenen Bildes wächst.

Beispiel: Speichernutzung 12MB --> Bildwechsel --> Speichernutzung 15 MB

Wenn man jetzt hunderte von Bildern in der ListBox hat, könnt ihr euch denken was passiert... :rolleyes:

1.FRAGE:

Wie kann ich dieses Verhalten ändern und den Speicher der bereits gezeigten Bilder wieder freigeben?

2.FRAGE:

Warum liegt die Prozessorlast meines Prozesses bei laufender Diashow bei 50 %? (Zur Info, ich hab nen Intel E8500 Core2Duo). Kann man das irgendwie performancesparender programmieren?

Vielen Dank schonmal.

1.FRAGE:

Wie kann ich dieses Verhalten ändern und den Speicher der bereits gezeigten Bilder wieder freigeben?

Brauchst du eigentlich nicht da sich der Garbage Collector darum kümmert und den allerspätestens freigibt sobald er benötigt wird.

2.FRAGE:

Warum liegt die Prozessorlast meines Prozesses bei laufender Diashow bei 50 %? (Zur Info, ich hab nen Intel E8500 Core2Duo). Kann man das irgendwie performancesparender programmieren?

Das wird daran liegen das dein Programm andauernd arbeitet und Delay anscheinend nicht wie Sleep ohne Prozessorlast wartet. Ich glaube da gabs in VB eine Funktion mit der man sagen konnte das Windows jetzt Zeit für andere Dinge hat, ich weiß aber nicht wie die heißt.

Eine andere Möglichkeit wäre das über einen Timer zu machen der alle 5 Sekunden das Bild wechselt.

Moin!

Hast Du mal versucht das "alte" Bild mit Dispose() frei zu geben, nachdem das neue geladen wurde? Möglicherweise bemerkt der garbage collector sonst nicht schnell genug, daß die Bitmap nicht mehr gebraucht wird,

Wenn der Speicher wirklich extrem zugemüllt wird könntest Du noch versuchen gc.collect(); aufzurufen und so den gc zum aufräumen zu zwingen. Das kostet aber gut Leistung (habe im Netz etwas von 70% gelesen und eigene Versuche haben eine starke Verzögerung ergeben) und sollte wirklich nur in Notfällen versucht werden.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.