Mid () против Mid $ () - PullRequest
       12

Mid () против Mid $ ()

10 голосов
/ 06 февраля 2009

Согласно документации в VB6 функция Mid () возвращает вариант, но Mid $ () возвращает строку, и, очевидно, это более эффективно.

Мои вопросы:

  1. Какой простой тест я могу использовать, чтобы определить разницу в производительности? Я пытался отслеживать простое приложение, выполняющее несколько строковых операций с Perfmon , но не было Заметная разница.

  2. Стоит ли беспокоиться об этом? У меня появилась привычка использовать $ -изображенные функции, но я должен рекомендовать всем в моей команде использовать это также?

Ответы [ 3 ]

20 голосов
/ 06 февраля 2009

Не стоит беспокоиться. Это остаток от Microsoft Basic 15-20 лет назад, когда быстрый процессор был на несколько порядков медленнее, чем что-либо сегодня.

У него есть определенная эстетическая привлекательность использовать Mid $, а не позволять VB определять, какие у вас типы данных. И если у вас есть какие-либо циклы, которые выполняют его, скажем, тысячи раз в секунду, то ваш фактор любопытства может возрасти. В противном случае, не.

Вот ссылка на того, кто измерил разницу. Mid $ был примерно в 2,5 раза быстрее Mid. Включая тесты, возвращающиеся к VB4.

4 голосов
/ 06 февраля 2009

Хотя производительность между ними ничтожна, на самом деле она не является отличительной чертой для использования.

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

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

3 голосов
/ 06 февраля 2009

Честно говоря, я думаю, что это незначительно.

Может быть, вы можете попробовать что-то вроде этого. Загрузите «Высокопроизводительный объект таймера» из http://ccrp.mvps.org/,, выполните длинный цикл (1 000 000 итераций или около того) строковых операций и измерьте разницу во времени выполнения. Под «операциями» я имею в виду: конкатенация Variant с, а не конкатенация String с. Mid() и Mid$(), скорее всего, будут выполнять то же самое. OTOH - вы также можете проверить , что .

Если бы вы это сделали, мне было бы интересно, если бы вы опубликовали результаты.

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