2015-07-16 3 views
5

Я всегда боюсь объявлять вещи как просто Варианты в предположении, что будет выделен ненужный большой объем памяти.«Dim myarray() as String« VS »Dim myarray() как вариант«

В последнее время работает для повышения производительности таблицы я однако получил противоположное впечатление (см редактирования ниже): Dim myarray() as Variant улучшается производительность по сравнению с Dim myarray() as String

Что было бы ключевые различия и последствия этих двух деклараций?

Не удалось найти четкие указания здесь: https://msdn.microsoft.com/en-us/library/aa711948.aspx

EDIT: Controlled Performance Test

Я провел испытание под контролем производительности (взять версию dim myarray() as Variant, сделать копию и изменить две переменные Dim myarray() as String)

Как вы можете видеть ниже, я ошибся, разница в производительности НЕ значительна.

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

Единственное, что вы изменили, это выключение 'Variant' для' String'? Вы время кода, чтобы проверить свою гипотезу о том, что скорость была улучшена? – Chrismas007

+1

Ссылка, которую вы указали, - это VB.Net, которая не имеет прямого отношения. Я предпочитаю использовать варианты для массивов с учетом их гибкости, особенно используя синтаксис 'Dim myarray As Variant' (вариант, который может содержать массив, а не массив вариантов. Я использовал такие вещи с количеством 100 000 записей (или больше) без проблем, но YMMV. –

+0

@JohnColeman У меня пока нет источника, но я думаю, что вы говорите прямо с ответами. Массивы - это единственный тип, который я видел, предлагаемый должен использовать 'Variant 'type. Когда вы используете тип' String', вы должны думать обо всех дополнительных символах, необходимых для определения строки в виде массива. – Chrismas007

ответ

1

Это имеет смысл объявить массив как любой тип данных, массив будет держать, это обеспечивает ясность для тех, кто смотрит на свой код в будущем. Как правило, лучше давать читаемость кода, жертвуя небольшим сохранением памяти (хотя это может быть зависимым от сценария). Например, если ваш массив будет содержать только строки, тогда объявите массив как строку. Принимая во внимание, что если ваш массив будет содержать смесь целых чисел и строк, тогда следует использовать вариант.

По существу, объявите массив как тип данных, который является логическим для того, что будет удерживать массив.

Если вы хотите заполнить массив из листа, вы должны объявить переменную как вариант. Попытка заполнить массив (со значениями из листа), который был объявлен как строка, приведет к отладке сообщения «Тип несоответствия», независимо от того, являются ли значения диапазона целыми.

Вот некоторые MSDN documentation, относящиеся к массивам внутри VBA.

Это то, что я следую с объявлением массивов в любом случае. Сделать код проще для чтения для будущих разработчиков>small Память сохраняет.

Смежные вопросы