Comunity version Allgemein Performance Frage :)

04/26/2018 20:11 ProDielerNR(1)#1
Hey
wie jeder kennt gibt es so Meinche Trix um die Performance innerhalb der form zu verbessern wie zum beispiel der Befehl; DoubleBuffered = True zu setzen.
Ich wollte an der stelle fragen ob es noch weitere nützliche Codes gibt
um etwas besser zu Performen zu können.
Meinche einer setzt hier bei auf das Klassische Dispose befehl
um wieder Speicher frei zu geben.
Aber ich würde gern mehr erfahren ob es noch mehr Möglichkeiten gibt
wie das DoubleBuffered Schema :3
Ja ich bin relativ neu in dem Programmierer bereich aber ich kenne mich
mittlerweile recht gut aus bzw komme gut zurecht nur würde ich gern mehr und
auch neue dinge mir aneignen wollen :)

ahja und bevor ich es vergesse schreibt bitte daneben wen es euch nichts aus macht was es genau verbessert :D
Schließlich will ich es ja auch verstehen können ^^
Liebe Grüße
ProDielerNR(1)
04/27/2018 08:22 Serraniel#2
DoubleBuffered ist aber primär nicht für die Performance gedacht, ich weiß auch nicht pauschal wie sich das darauf auswirkt ehrlich gesagt, es werhindert halt lediglich das die Form bei manchen dingen flackert weil die öfters neu berechnet wird als sie gezeichnet wird.
Disposing ist auch eher ein Beispiel um Systemresourcen wie Streams auf Dateien nach Verwendung wieder freizugeben, damit du eine Resource mit deiner Anwendung nicht weiter blockierst, nachdem du mit deinen Operationen, z. B. Laden, eigentlich schon fertig bist.

Denke die wichtigsten Dinge die man berücksichtigen sollte findet man, wie so üblich, mit den ersten drei bis fünf Google Treffern. Ist auch nicht immer sinnvoll alles strikt zu optimieren, vieles macht die Runtime auch schon, Stichwort kaputt optimieren.

[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
04/27/2018 14:55 ProDielerNR(1)#3
Ich wusste erlich gesagt nicht wonach ich suchen soll daher habe ich hier nach Rat gefragt/gesucht. :)
Ich werde mir auf jedenfall die links mir heute Abend durchlesen.
Super das du mich korrigiert hast, ich hab mir jedoch schon so etwas gedacht
aber auch von der Berechnung her wird es Optimiert zumindest wen es um Transparenz geht.
So kommt es mir Jeglich vor aber super erklärt :D

Anmerkung;
Man ist es schwer sich nicht zu bedanken
(wegen der regel) das fehlt mir immer wieder so auf xD

Liebe Grüße
ProDielerNR(1)

Vielleicht bin ich zu dumm um es zu verstehen...
Jedenfalls hat es mich leider nicht wirklich weiter gebracht :?
Ich hoffe/Freue mich jedoch noch mehr Kommentare von euch Lesen zu können ^^
04/29/2018 22:08 ProDielerNR(1)#4
Scheint wohl so das außer dir niemand wirklich hilfst bereit ist oder eine Idee hätte Serraniel ^^"
Naja wie auch immer dann können wir auch das Thema schließen.
Closed Quest
04/30/2018 11:39 Ludder231#5
Ich verstehe nicht so ganz was du willst. Willst du, dass die GUI responsiv bleibt wärend du rechenintensive Aufgaben durchführst oder allgemein nur die Performance deiner Applikation verbessern?

Ich benutze immer gerne Tasks/Threads für Aufgaben. Vielleicht hilft dir das schon weiter.
04/30/2018 19:24 qqdev#6
Normalerweise versucht man die Performance nur zu verbessern, wenn sie ein Problem darstellt. Dann ermittelt man über Metriken wo das Problem konkret ist und sucht nach einer Lösung. Allgemein nach Performance-Tricks zu fragen macht, meiner Meinung nach, hier nicht so viel Sinn.

Viele Grüße
05/04/2018 23:20 mrapc#7
Die Idee GUI und "Logik" voneinander zu trennen halte ich für clever wie Ludder231 schon sagte.

Du könntest dir auch überlegen auf eine andere Technologie als WinForms zu setzen, WPF, XNA (wurde leider eingestellt)...
Der Einstieg in WPF fällt recht schwer, zumindest war das bei mir so, lohnt sich aber, denn die GUIs sehen besser aus und sind auch "performanter".

So richtig Code Tricks für bessere Performance hab ich jetzt nicht kommt auf den konkreten Fall an, aber mit Graphics (System.Drawing und GDI+) zu arbeiten ist zum Beispiel schneller und besser als irgendwie sowas wie ein Farbverlauf über Bitmap.SetPixel(x,y,color) zu generieren.
Es ist am Ende alles eine Frage von klever verwendeten Algorithmen.
05/05/2018 01:39 ComputerBaer#8
Quote:
Originally Posted by mrapc View Post
XNA (wurde leider eingestellt)...
Stimmt nur so halb. Ja, XNA wird von Microsoft nicht mehr weiterentwickelt, allerdings gibt es seitdem [Only registered and activated users can see links. Click Here To Register...], welches immer noch aktiv entwickelt wird und auch noch sehr viel XNA Code enthält. (Natürlich komplett [Only registered and activated users can see links. Click Here To Register...])


ProDielerNR(1), wenn du da an einem Spiel arbeitest und das Zeichnen zu viel performance kostet, solltest du dir MonoGame ansehen (oder eine Engine wie z.B. Unity oder Xenko). Wenn das ein "normales Programm" ist, dann sind WindowsForms oder WPF normalerweise die bessere Entscheidung.
05/05/2018 18:26 warfley#9
Eine Sache die Anfänger oftmals vergessen ist das locken von GUI controls beim updaten. Z.B. Listboxen updaten bei jeder Änderung. Wenn man jetzt viele änderungen machen will kann das echt lang dauern. Dafür kann man mit XYZ.BeginUpdate und EndUpdate einen block definieren in dem nicht neugezeichnet werden soll.
z.B:
Code:
ListBox1.BeginUpdate()
Try
  ListBox1.Items.Clear()
  For i As Integer = 1 To 100000
   ListBox1.Items.Add(i.ToString)
  Next
Finally
  ListBox1.EndUpdate()
End Try
Probier den Code mal mit und mal ohne Begin/EndUpdate aus
05/05/2018 20:59 Serraniel#10
Quote:
Originally Posted by warfley View Post
Eine Sache die Anfänger oftmals vergessen ist das locken von GUI controls beim updaten. Z.B. Listboxen updaten bei jeder Änderung. Wenn man jetzt viele änderungen machen will kann das echt lang dauern. Dafür kann man mit XYZ.BeginUpdate und EndUpdate einen block definieren in dem nicht neugezeichnet werden soll.
z.B:
Code:
ListBox1.BeginUpdate()
Try
  ListBox1.Items.Clear()
  For i As Integer = 1 To 100000
   ListBox1.Items.Add(i.ToString)
  Next
Finally
  ListBox1.EndUpdate()
End Try
Probier den Code mal mit und mal ohne Begin/EndUpdate aus
Das vergessen auch gerne Chefs mal, die sich vor ca. 3 Jahren aus der aktiven Entwicklung zurückgezogen haben, das kann ich dir sagen :heh: