VB6 - Есть ли какой-либо выигрыш в производительности при использовании строк фиксированной ширины в VB6? - PullRequest
8 голосов
/ 27 апреля 2011

В Visual Basic до .NET программист мог объявить строку определенной ширины.Например, я знаю, что номер социального страхования (в США) всегда составляет одиннадцать символов.Итак, я могу объявить строку, в которой будут храниться номера социального страхования, в виде строки из одиннадцати символов, например:

Dim SSN As String * 11

Мой вопрос таков: создает ли это какой-либо выигрыш в производительности, который либо делает кодработать быстрее или, возможно, использовать меньше памяти?Кроме того, будет ли строка фиксированной длины выделяться в памяти по-другому (, т.е. : в стеке, а не в куче)?

Ответы [ 2 ]

6 голосов
/ 27 апреля 2011

Нет, никакого выигрыша в производительности нет.

НО даже если бы были, если вы не вызывали много (скажем, миллионы) раз в цикле, любойвыигрыш в производительности будет незначительным.

Кроме того, строки фиксированной длины занимают больше памяти, чем строки переменной длины, если вы не используете всю длину (если не очень короткие строки фиксированной длины).

Каквсегда, прежде чем усложнить поддержку кода, следует тщательно выполнить тестирование.

Строки фиксированной длины обычно видны при взаимодействии с некоторыми COM-API или при моделировании с ограничениями домена (например, в примере, который вы привели для SSN)

4 голосов
/ 29 апреля 2011

Единственный раз в VB6 или ранее, когда мне приходилось использовать строки фиксированной длины, была работа с вызовами API.Если не передать строку фиксированной длины, это может привести к необъяснимым ошибкам в тех случаях, когда длина превышает ожидаемую, а иногда даже когда она меньше ожидаемой.

Если вы просматриваете и планируете изменить это в приложении, убедитесь, чтонет передачи строк в API или внешнюю DLL, и что программе не требуется выводить поля фиксированной длины, например, во многих программах импорта AS / 400.

Лично мне никогда не приходилось видетьразница в производительности, поскольку я выполнял циклы с записями более 300 тыс., но у меня не было другого выбора, кроме как обеспечить и работать с фиксированной длиной, когда я это сделал.Однако VB любит использовать неопределенные длины по умолчанию, поэтому я предполагаю, что при фиксированной длине производительность будет ниже.

Попробуйте написать тестовое приложение для выполнения базовой конкатенации двух строк и сделать так, чтобы оно зацикливалось на функции, как50к раз.Время разница между двумя из которых имеет одну неопределенную длину и другой фиксированной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...