Как увидеть размер скомпилированной подпрограммы в VBA Excel 2016? - PullRequest
0 голосов
/ 23 мая 2018

Обнаружив ошибку «процедура к большому» в определенной подпрограмме модуля, я выполняю рефакторинг кода в модуле.Мне было любопытно, насколько эффективен рефакторинг при уменьшении размера скомпилированного кода.

Так что мне было интересно, есть ли способ увидеть размер скомпилированного кода подпрограммы в модуле Excel 2016?

До сих пор мои попытки ограничивались поиском в Интернетеметоды определения размера скомпилированного модуля или подпрограммы в VBA.

Это привело меня к пределам VBA, перечисленным в здесь .В нем не упоминается способ увидеть размер скомпилированной процедуры, а также не упоминается, возможно ли это (практически).

(Как уже упоминалось в комментариях, текущий максимальный размер скомпилированной процедуры64K, как указано здесь .)

  1. Я думаю, что размер скомпилированной процедуры не равен 1 на 1 и связан с количеством строк.(Потому что это не учитывает короткие или длинные строки. Но в настоящее время я не уверен в том, как компилируется vba-procure, и, следовательно, как строки влияют на размер скомпилированного файла, в противном случае решением может быть вычисление размера скомпилированного файла..)
  2. Кроме того, процедура 1 на 1 не зависит от размера кода, который хранится в виде файла .txt.(потому что он может содержать комментарии, которые не влияют на размер скомпилированного кода)

Disclamer - Я хорошо осведомлен о недостатках старого кода, который я изменяю.Что это плохо написано, я думаю, что эта цитата Билла Гейтса хорошо иллюстрирует это:

Измерение прогресса в программировании по строкам кода похоже на измерение прогресса в самолетостроении по весу.

Я думаю, что рефакторинг и разбиение кода на более короткие подпрограммы являются подходящим первым шагом.Чтобы контролировать этот процесс, в сочетании с жестким узким местом, представленным VBA как ошибка Procedure too long, я привел к этому вопросу.

1 Ответ

0 голосов
/ 23 мая 2018

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


Вам нужно срочно прочитать о Абстракция .Процедура, которая вызывает эту ошибку компилятора, составляет более 10 тыс. Строк кода.Исправная процедура на соответствующем уровне абстракции может быть где-то в 500–1000 раз меньше этой (не шучу) - размер скомпилированного кода абсолютно бессмысленен .

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

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

Существуют сторонние инструменты, которые можно использовать для анализа кода VBA.MZ-Tools 3.0 была бесплатной, но последняя версия - нет.Он имеет функцию, которая может сказать вам, сколько строк кода в каждой процедуре каждого модуля, сколько из них закомментировано, есть ли у вас неиспользуемые переменные и т. Д.

Rubberduck является бесплатным и открытым исходным кодом, находится в стадии активной разработки (отказ от ответственности: у меня есть репозиторий проекта) и имеет функцию метрики кода (отличную от проверки кода ), которая, вероятно, может помочь вамопределить наиболее проблемные области (хотя анализ модуля 10K-liner может занять некоторое время):

Rubberduck Code Metrics

Lines - это ваша метрика "строк кода"; Cyclomatic Complexity - приблизительный показатель различных возможных путей выполнения в вашем коде (насколько спорным является значение, которое имеет метрика в агрегате уровня модуля); Максимальная вложенность также является показателем того, насколько ужасным может быть код в виде стрелки.

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

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