Schnellste Methode Sie überprüfen, ob ein array leer ist in vb.net
Ich wissen wollen, der Schnellste Weg, um zu überprüfen, ob ein array leer ist in vb.net. Das array bereits initialisiert, so kann ich nicht verwenden Sie eine der Prüfungen, die schauen sich das an. Dies ist der aktuelle code unten:
If Not (cubes(threadnumber)(i).objects.GetLength(0) = 0) Then
cubes(threadnumber)(i).objects = New Double() {}
ReDim cubes(threadnumber)(i).objects(-1)
End If
Habe ich ein paar Tests gemacht und ich weiß, dass mit '.getupperbound' ist ein wenig schneller, aber ich bin mir nicht sicher, ob dies funktionieren wird, weil ich denke, dass '.getupperbound' gibt eine 0 zurück, wenn das array die Länge 1.
Alle Methoden zur Beschleunigung (auch geringfügig), wird extrem hilfreich sein. Dieses Programm dauert eine Ewigkeit, bis gesammte und in der ersten Zeile der obigen code ist ein großer Teil der Zeit, es heißt 136 Millionen mal.
Auch wenn jemand weiß, wie zu beschleunigen "for next" - Schleifen, die zu groß sein würde!
Dank 🙂
Fraser
danke für die Antwort (wenn auch 2 Jahre nachdem ich die Frage gestellt!) :). Ich habe viel gelesen über Optimierung seit diesem post, aber speziell auf der Suche, ob ein array leer ist, endete als zu langsam für meine große arrays von arrays.
Nie zu spät! Ok, vielleicht sollte ich mich bei dem Frage-und-Antwort-Termine, aber es hat herausragende teilweise Fragen. Die Lösung, die Sie kam mit war meine erste Antwort, mehr oder weniger. Im Grunde genommen, wenn der Zugang zu einem Objekt-Eigenschaft ist zu teuer, zu verfolgen, sich selbst in eine einfachere/schnellere Art. Cheers.
InformationsquelleAutor FraserOfSmeg | 2012-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Length
etwa 2x schneller alsGetLength
auf meinem system (callingLength
136M mal nimmt 0.650 Sekunden, während die aufrufendeGetLength (0)
nimmt 1.480 Sekunden).Ich verstehe auch nicht, warum du mit ReDim das array, die Sie bereits erstellt haben eine neue.
Ich glaube, das wird der Schnellste code, wenn die Würfel ist ein multi-dimensionales array:
Wenn die Würfel nicht eine multi-dimensionale array (wie Liste zum Beispiel), sollten Sie die
cubes(threadnumber)
code aus der Schleife.Update
Length
ist 6x schneller alsGetLength
wenn im Release-Modus, ohne den debugger, in diesem FallLength
nimmt 0.181 s undGetLength
1.175 s auf meinem system. Dies ist wahrscheinlich, weil der JIT-wird inline-AufrufLength
, aber nicht der Aufruf zuGetLength
.Diese ist der test-code, den ich verwendet.
InformationsquelleAutor Rolf Bjarne Kvinge
oder
Danke für die Antwort, aber ja das größte problem mit diesem ist, dass überall schlagen vor, die überprüfen, ob es nicht initialisiert wurde, im Gegensatz zu leeren. Danke für den Versuch, aber 🙂
Mein Verständnis ist, dass, wenn es noch nicht initialisiert wurde, ist es äquivalent zu VB.NET "nichts". Aber um ehrlich zu sein, ich bin mir nicht sicher, was genau du versuchst zu erreichen.
Das ist mein Verständnis - nicht initialisiert = nichts. Aufgrund der Art, ich habe die Codes alle arrays sind initialisiert, aber nur einige von Ihnen haben eine Länge > 0.
Ahh, ich bekomme es jetzt. Ich werde shutup und lassen Menschen, die wissen, wovon Sie reden (wie Derek) nützliche info.
InformationsquelleAutor sj1900
GetLength ist der Schnellste Weg den ich kenne um zu sehen, wenn ein array-Elementen in es. Ich glaube nicht, dass Sie Geschwindigkeit bis dieses Stück code.
Jedoch der code, der den Aufruf dieses 136 Millionen mal könnte wohl noch optimiert werden.
Blick auf den code:
Ich vermute, dass der Grund, den Sie testen, ob es Elemente hat, so kann man mit redim das array, um Speicher freizugeben. Eine bessere Möglichkeit, um Speicherplatz freizugeben, könnte es sein, deaktivieren Sie das Würfel-Objekt statt und erlauben es die arrays zu fallen aus dem Rahmen.
InformationsquelleAutor Derek Tomes
Nach einigen intensiven Tests und der Analyse, die ich gefunden habe, was zu sein scheint die Schnellste Methode (bisher zumindest). Die Herstellung dieser kleinen änderung hat sich beschleunigt mein Programm 500-600%.
Wenn es ein Element Hinzugefügt, um die Objekt-arrays Stell ich auch der index der zweiten dimension des cubes zu einer Liste, WENN der index der zweiten dimension ist nicht bereits in der Liste. Andere vermuten wäre begrüßenswert.
InformationsquelleAutor FraserOfSmeg