Zawsze boję się ogłaszać, że rzeczy są tylko wariantami przy założeniu, że zostanie przydzielona niepotrzebna duża ilość pamięci."Dim myarray() jako ciąg" VS "Dim myarray() jako wariant"
Ostatnio pracuje nad poprawą wydajności arkusza ja jednak dostał odwrotny wrażenie (patrz Edycja): Dim myarray() as Variant
była poprawa wydajności w porównaniu do Dim myarray() as String
Co będzie kluczem różnice i konsekwencje dwóch deklaracji?
Nie można znaleźć jasne wytyczne tutaj: https://msdn.microsoft.com/en-us/library/aa711948.aspx
EDIT: Controlled Performance Test
Pobiegłem test wydajności sterowane (wziąć wersję dim myarray() as Variant
, zrób kopię i zmienić dwie zmienne do Dim myarray() as String
)
Jak widać poniżej się pomyliłem, różnica w wydajności NIE jest znacząca.
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
Jedyną rzeczą, którą zmieniono, było wyłączenie 'Wariant' dla' String'? Czy zdarzyło Ci się, aby kod zweryfikował twoją hipotezę, że prędkość została poprawiona? – Chrismas007
Podany link jest do VB.Net, który nie jest bezpośrednio związany. Zdecydowanie preferuję używanie wariantów dla tablic ze względu na ich elastyczność, szczególnie przy użyciu składni 'Dim myarray As Variant' (wariant, który może pomieścić tablicę zamiast szeregu wariantów) Użyłem takich rzeczy z aż 100 000 wpisów (lub więcej) bez problemu, ale YMMV –
@JohnColeman Nie mam jeszcze na ten temat źródła, ale myślę, że mówisz do odpowiedzi właśnie tam .. Tablice są jedynym typem, jaki widziałem, zasugerowałem użycie 'Wariantu 'type. Kiedy używasz typu' String', musisz myśleć o wszystkich dodatkowych znakach potrzebnych do zdefiniowania łańcucha jako tablicy. – Chrismas007