Имеет ли значение, если я уберу свое предложение uses, если удаленные единицы все еще используются в других единицах?

StackOverflow https://stackoverflow.com/questions/763862

  •  11-09-2019
  •  | 
  •  

Вопрос

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

Итак:Имеет ли это значение, если я почищу свой uses предложения, даже если в итоге ни один объект не будет удален из проекта?Если это так:Каким образом?И:Является ли очистка uses предложите что-нибудь, что должно быть сделано как можно скорее, или это может подождать, пока я случайно не найду неиспользуемый модуль?

Это было полезно?

Решение

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

Порядок компиляции:Компилятор решает, в каком порядке компилировать модули, основываясь на том, какие модули какие модули используют.Если вы удалите модуль из предложения uses раннего модуля, это может привести к тому, что используемый модуль будет скомпилирован позже в цикле компиляции.Может показаться, что это не так уж много, но имейте в виду, что инициализация разделы выполняются в том же порядке, в каком были скомпилированы блоки.Однако на самом деле это не должно иметь большого значения для вашего проекта.

CodeInsight кодовое видение:Когда вы откроете раскрывающийся список завершения кода, он предложит варианты, основанные на всех доступных в данный момент устройствах.Вы можете уменьшить количество вариантов, которые ему приходится фильтровать - и, следовательно, количество времени, которое требуется, чтобы вытащить эту чертову штуку! - за счет уменьшения количества используемых вами устройств.(Нет, я не озлоблен.Почему ты спрашиваешь?)

Другие советы

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

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

Но я по-прежнему призываю вас очистить свои списки единиц измерения по той же причине, по которой вам рекомендуется очистить свои списки переменных и списки параметров.Когда вы избавляетесь от ненужного материала, вам становится легче читать сохраненный код, потому что вы можете быть достаточно уверены в том, что то, что вы читаете, дает точную картину того, что делает код.Если в вашем коде упоминается куча модулей, но на самом деле они никогда не используются, то в следующий раз, когда вы или кто-то другой посмотрит на код, там есть хорошее изменение, и вы потратите некоторое время, пытаясь найти, где ваш код использует возможности этих модулей.(Вы скажете себе: "Хм, этот код включает в себя Graphics, но я не вижу, где он что-то рисует.Мне лучше взглянуть еще раз, потому что я не думал, что у этого кода есть какие-либо подобные обязанности.Эй, коллега, не мог бы ты выделить немного времени из своего рабочего дня, чтобы рассказать мне, где это подразделение что-то рисует?")

Да, есть один трюк это часто упускается из виду и может ударить вас в спину:
Если есть какие-то инициализация /завершение код, это всегда выполняется даже если в вашем устройстве нет кода, вызываемого иным образом (и устройство всегда включено хотя вы могли бы подумать, что этого не произойдет).Таким образом, удаление модуля, который вам не нужен в вашем проекте, может существенно изменить ситуацию.

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

Помимо этого, как указали Мейсон и Роб, порядок единиц влияет на порядок, в котором они компилируются, и последовательность инициализации / завершения.

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

Я категорически не согласен с Мейсоном и Робом:это действительно имеет значение!

Уменьшение зависимости.

Разница заключается не в текущем проекте, как объяснили Мейсон и Роб.Вместо этого разница заключается в вашем СЛЕДУЮЩЕМ проекте.Если вы сохраните ненужные (серверные) модули в своем (клиентском) модуле, то использование этого клиентского модуля в другом проекте также приведет к появлению зависимостей.Если для только что загруженных модулей нет других обоснованных клиентских модулей, значит, вы добавили раздувание.

Используйте free Pascal Analyzer, чтобы обнаружить неиспользуемые блоки в вашем коде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top