2017-06-11 4 views
-4

Eine Lesezeit von 145 Millionen Arrays dauert 6 Sekunden. Wie kann es schneller gemacht werden?Verbesserte VBA-Array-Leseleistung

Dim X As Integer 

X = 0 
For Y = 1 To 17000 
    For Yn = Y To 17000 
     d = Ary(Yn, X) 
    Next 
Next 

Ary (Yn, X) ist Variante/Datum.
Ary Größe ist ~ 17000 x 7

Die Schleife ohne das Array liest 1,5 Sekunden. Das Array liest 6,5 Sekunden hinzu.

+1

Tun * alles * 145 Millionen Mal braucht Zeit, auch für einen Computer. Der einzige Weg, um es schneller zu machen, ist einen Weg zu finden, es nicht so oft zu lesen. – Kaz

+2

Wenn Sie den * gleichen * Wert bis zu 17.000 Mal lesen, zeigt dies an, dass Sie nicht die richtige Datenstruktur verwenden. – ThunderFrame

+2

@NOYB Wie die Frage gestellt wird, ist ein [X-Y-Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Bitte geben Sie weitere Einzelheiten darüber an, was Sie erreichen möchten. – ThunderFrame

Antwort

4

Ihr Code ist unvollständig oder bedeutungslos. Sie lesen den Wert eines Arrays 144,508,500 Millionen Mal, aber Sie verwerfen das Ergebnis 144,508,499 mal.

Wenn Sie nur über das letzte Ergebnis kümmern, werde ich das für Sie optimieren:

Dim X As Integer 
d = Ary(17000, X) 

Sagen Sie uns, was Sie wirklich tun wollen, und wir bieten eine bessere Antwort.

Es gibt ein paar allgemeine Dinge, die Sie tun können:

keine Variant/Date Array Verwenden Sie - Varianten mehr Speicher, und wenn sie aus Excel eingelesen sind, gibt es einige Kopf das Datumsformat in die Erhaltung von der Region. Mit einem Date-Array wäre es besser, und ich vermute, dass es mit einer Reihe von Doubles noch besser klappt.

Angenommen, Sie möchten eine Art von Datumsvergleich durchführen, lesen Sie mehrere Zeilen mehrmals hintereinander. Sehen Sie sich das Dictionary-Objekt genauer an, und Sie können die Anzahl der Lesevorgänge wahrscheinlich drastisch reduzieren.

+0

Der Code ist der relevante Teil der Schleife. Es gibt eine andere Verarbeitung, die d verwendet. Diese Frage bezieht sich nur auf die Leistung der Übernahme von d aus dem Array. Das Array ist zweidimensional vom Typ variant und wird mit Daten und Werten (reellen Zahlen) ausgefüllt. Wie würde ich mit Typ Datum für Spalte 0 und Doppel für Spalten 1 bis 6 gehen? Ist das möglich, ein Multi-Typ-Array zu haben? Nirgendwo habe ich Excel erwähnt. Dies ist ausschließlich VBA. Vermeidung der Bindung an Objekte. – NOYB

Verwandte Themen