2015-07-16 10 views
5

Ich habe immer Angst, Dinge nur als Varianten zu deklarieren, unter der Annahme, dass unnötig viel Speicher zugewiesen wird."Dim myarray() als String" VS "Dim myarray() als Variante"

Kürzlich zur Verbesserung der Leistung eines Tabellenkalkulationsarbeits aber ich den gegenteiligen Eindruck bekam (siehe bearbeiten unten): Dim myarray() as Variant war die Verbesserung der Leistung im Vergleich zu Dim myarray() as String

Was wäre die wichtigsten Unterschiede und Folgen der beiden Erklärungen sein?

konnte nicht klare Anleitung finden Sie hier: https://msdn.microsoft.com/en-us/library/aa711948.aspx

EDIT: Kontrollierte Leistung Test

Ich lief eine kontrollierte Performance-Test (nehmen Sie die dim myarray() as Variant Version, eine Kopie erstellen und zwei Variablen Dim myarray() as String ändern)

Wie Sie unten sehen können, habe ich mich geirrt, der Leistungsunterschied ist NICHT signifikant.

Dim myarray() as Variant VERSION

Start 4:05:47 PM
FXLoaded 4:05:47 PM 00:00 TDLoaded 4:06:38 PM 00:51 LisofPCTD 4:06:57 PM 00:19 YDLoaded 4:07:47 PM 00:50 LisofPCYD 4:08:14 PM 00:27 PrintCoBTD 4:08:46 PM 00:32 PrintCoBYD 4:09:18 PM 00:32 Total 03:31 03:31

Dim myarray() as String VERSION

Start 4:25:53 PM
FXLoaded 4:25:53 PM 00:00 TDLoaded 4:26:53 PM 01:00 LisofPCTD 4:27:10 PM 00:17 YDLoaded 4:28:07 PM 00:57 LisofPCYD 4:28:32 PM 00:25 PrintCoBTD 4:29:03 PM 00:31 PrintCoBYD 4:29:34 PM 00:31 Total 03:41 03:41

+0

Das einzige, was Sie geändert haben, war 'Variant' für' String' auszuschalten? Haben Sie den Code überprüft, um Ihre Hypothese zu bestätigen, dass die Geschwindigkeit verbessert wurde? – Chrismas007

+1

Der von Ihnen angegebene Link ist VB.Net, der nicht direkt relevant ist. Ich bevorzuge die Verwendung von Varianten für Arrays aufgrund ihrer Flexibilität, vor allem mit der Syntax "Dim myarray As Variant" (eine Variante, die ein Array anstelle eines Arrays von Varianten enthalten kann. Ich habe solche Dinge mit bis zu 100.000 Einträgen verwendet) (oder mehr) ohne Problem, aber YMMV –

+0

@JohnColeman Ich habe noch keine Quelle dazu, aber ich denke, Sie sprechen mit der Antwort genau dort. Arrays sind der einzige Typ, den ich gesehen habe vorgeschlagen, sollte die 'Variante verwenden 'type: Wenn Sie einen' String'-Typ verwenden, müssen Sie sich alle zusätzlichen Zeichen vorstellen, die zum Definieren der Zeichenfolge als Array benötigt werden. – Chrismas007

Antwort

1

Es macht Sinn ein Array als unabhängig von Datentyp zu erklären, das Array wird halten, bietet diese Klarheit für jedermann in Ihrem Code suchen in der Zukunft. Es ist im Allgemeinen besser, die Lesbarkeit des Codes anzugeben, wobei ein geringer Speicherbedarf geopfert wird (obwohl dies abhängig vom Szenario sein kann). Wenn Ihr Array beispielsweise nur Zeichenfolgen enthält, deklarieren Sie das Array als Zeichenfolge. Wenn Ihr Array jedoch eine Mischung aus ganzen Zahlen und Strings enthält, sollte eine Variante verwendet werden.

Im Wesentlichen deklarieren Sie das Array als den Datentyp, der für das, was das Array enthält, logisch ist.

Wenn Sie ein Array aus einem Arbeitsblatt auffüllen möchten, müssen Sie die Variable als eine Variante deklarieren. Wenn Sie versuchen, ein Array (mit Werten aus einem Arbeitsblatt) aufzufüllen, das als String deklariert wurde, wird die Debug-Meldung "Typ nicht übereinstimmen" ausgelöst, unabhängig davon, ob die Werte des Bereichs alle Zeichenfolgen sind.

Hier sind einige MSDN documentation in Bezug auf Arrays innerhalb von VBA.

Das ist, was ich folgen mit Arrays sowieso erklären. Code für zukünftige Entwickler leichter lesbar machen>leicht Speicher speichert.

Verwandte Themen