schleife wird immer langsamer

fredlllll

Erfahrenes Mitglied
ja ich habe ein problem und zwar dass meine schleife immer langsamer wird
Code:
Dim i, j
For i = 1 To breite
For j = 1 To hohe
Load pka(((j - 1) * (breite)) + i)
pka(((j - 1) * (breite)) + i).Left = (i - 1) * 135
pka(((j - 1) * (breite)) + i).Top = (j - 1) * 135
pka(((j - 1) * (breite)) + i).Visible = True
DoEvents
Next
Next

ab 32x10 ist es deutlich zu sehen dass er langsamer wird...
kann man das ganze irgendwie beschleunigen? oder bin ich dazu verflucht nie mehr als 30x30 hinzubekommen weil es einfach zu lange dauert?

info:
pka ist ein benutzerdefiniertes steuerelement welches einen pixel darstellen soll in meiner form(so ne art malprogramm mit riesenpixeln)
 
Grundsätzlich kann das hier natürlich niemand reproduzieren, da wir Dein benutzerdefiniertes Steuerelement nicht haben.

Jedoch ist zunächst pauschal festzustellen, dass i und j ohne Typ-Angabe dimensioniert werden, daher werden diese von VB als Variant deklariert. Von den anderen Variablen sehe ich in dem Codeschnipsel keine Dimensionierung, in diesem Falle (falls sie nicht noch irgendwo anders dimensioniert werden) muss VB sich jedesmal damit beschäftigen, zu prüfen, als was dies nun verwendet werden soll.

Eine Nicht-Dimensionierung und eine Variant-Dimensionierung gehen gerade in derartigen Schleifen sehr auf die Geschwindigkeit, und auch auf den Speicherbedarf gegenüber einer dem Typ wirklich entsprechenden Dimensionierung, in diesem Fall müsste es also heißen:

Code:
   Dim i as Integer
   Dim j as Integer

Ob dies Deine Schleife nun so ausbremst, kann man anhand des kurzen Schnipsels natürlich nicht sagen, jedoch solltest Du diese Umstellungen in jedem Fall durchführen.

Es ist auch sauberer, wenn als erst Anweisung in jeder Form und jedem Modul "Option Explicit" steht.
 
hab jetz mal alle variablen deklariert....
leider keine veränderung...

wenn du willst kann ich dir das projekt mal schicken damit dus dir anschaun kannst... wär schon toll wenn es gleichschnell bleiben würde oder noch schneller werden würde...
 
Du kannst mir das Projekt ja mal gezippt per PN schicken. Dann schau ich bei Gelegenheit mal rein, vielleicht fällt mir was auf.
 
Ich kann auf den ersten Blick auch nix erkennen, aber och würde mal den Term

((j - 1) * (breite)) + i

einer eigenen Variablen zuweisen, einfach von der Lesbarkeit

Visual Basic:
Dim myIndex As Long

myIndex=((j - 1) * (breite)) + i

Load pka(myIndex)
blbalbalb

das einzige was mir sonst noch einfällt wäre die Begrenzung von 255 Controls pro Form, da du aber ein Control-Array verwendest, weiss ich nicht, ob diese Regelung greift.
32x10 sind 320 Controls.....
 
das einzige was mir sonst noch einfällt wäre die Begrenzung von 255 Controls pro Form, da du aber ein Control-Array verwendest, weiss ich nicht, ob diese Regelung greift.
32x10 sind 320 Controls.....

Dann würde das Programm aber abstürzen, jedoch nicht nur langsamer werden. Vielleicht sind in dem Programm ja rekursive Aufrufe, die können ein System bei größeren Datenmenge stark ausbremsen.
 
@ronald
ich schick dir des mal
@zwnoni:
bei mehr als 255 objekten macht er ne fliege. aber nich bei arrays. des funktioniert ja so...
 
Ich würde mal vermuten, da du dynamisch immer mehr Controls hinzufügst, hast du auch potentiell mehr Controls die in einem Eventhandler geprüft werden könnten.
Beschleunigen könnte hier evtl. nur ein Form.redraw = false / bzw- ein UserControl.redraw = false während der Ladezeit sonst wüsste ich auch nichts

grüsse bb

@Zvoni: Seit wann achtest du auf lesbarkeit ;-)
 
Zurück