2009-02-06 2 views
7

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

Мои вопросы:

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

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

+0

Теперь вы можете проголосовать за него. ;-) – Tomalak

+0

Ничего плохого в бит quo pro quo. :) – jakdep

ответ

17

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

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

Here's a link Кому-то, кто измерил разницу. Mid $ был примерно в 2,5 раза быстрее, чем Mid. Включая тесты, возвращающиеся к VB4.

+0

Спасибо. Интересная ссылка, именно то, что я искал. – jakdep

+1

Возможно, вы захотите рассмотреть возможность включения сторонней библиотеки, такой как выносливость. Включает в себя множество процедур обработки строк, написанных на C, которые намного быстрее, чем VB6. http://www.hallogram.com/stamina/routines.html –

3

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

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

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

+3

+1 для ссылки на объект Timer.Я сравнил Mid («ABC») с Mid $ («ABC»), как в ссылке, предоставленной le dorfier, более 100 000 000 итераций и измерил продолжительность с помощью высокопроизводительного секундомера. Середина() заняла 35.364 секунды, а Mid $() заняла 13.56 секунды. Таким образом, он соответствует результатам, показанным в ссылке. – jakdep

+0

* cough * * cough * Извините, это +1, если бы я мог его продвинуть. – jakdep

+0

Я удивлен. Это действительно * * заметная разница. – Tomalak

4

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

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

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

+0

Точно! Варианты следует избегать, когда это возможно. – mafu

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