如果我删除了我的使用条款,如果删除的单位仍在其他单位中使用,它会有所不同吗?

时间:2009-04-18 18:01:17

标签: delphi delphi-units

如果我的uses条款尽可能小,我个人喜欢它,但在许多应用程序中,真正的大单位(就可膨胀的可执行文件而言)如FormsVirtualTrees是至少在另一个单位需要。

所以:如果我清理uses条款,即使最终没有从项目中移除任何单元,它会有所不同吗?如果真是这样,那么是以哪种方式?并且:清除uses条款应该尽快完成,还是等到我偶然找到一个未使用的单位?

5 个答案:

答案 0 :(得分:14)

如果在项目的其他地方使用它,除了生成更易于阅读的更清晰的代码之外,它不会产生太大的影响。但是,它可能会影响一些小事。

编译顺序:编译器根据哪些单位使用哪些单位来决定编译单位的顺序。如果从早期单元的uses子句中删除单元,则可能导致在编译循环中稍后编译使用过的单元。这听起来可能不是很多,但请记住,初始化部分的运行顺序与编译单元的顺序相同。不过,这对你的项目来说真的不应该有太大的不同。

CodeInsight:当您提取代码完成下拉列表时,它将根据当前可用的所有单位提供选择。你可以通过减少你正在使用的单位数来减少必须过滤的选择次数 - 从而减少抽血的时间! (不,我不苦。你为什么问?)

答案 1 :(得分:9)

一般没有。如果一个单元在项目的任何地方使用过一次,那么使用它的次数并不重要。相反,如果一个单元至少在某个地方仍然使用了一个单元,那么移除一个单元的位置并不重要。编译后的程序行为相同,大小大致相同。

唯一的区别在于单元初始化和完成部分的顺序。单位使用顺序会影响这些部分的执行顺序,尽管从未记录过精确的效果(所以尽量不要依赖初始化顺序)。

但我仍然鼓励您清理单位清单,因为我们鼓励您清理变量列表和参数列表。当你摆脱不需要的东西时,它可以更容易地阅读你保存的代码,因为你可以合理地确信你正在阅读的内容可以准确地描述代码的作用。如果您的代码提到了一堆单位但从未真正使用它们,那么下次您或其他人查看代码时,您将花费一些时间来尝试查找代码使用设施的位置,这是一个很好的更改这些单位。 (你会对自己说,“嗯,这段代码包括Graphics,但是我看不出它在哪里画了什么。我最好再看看,因为我认为这段代码没有任何责任嘿,同事 - 你可以抽出一些时间来告诉我这个单位在哪里画东西吗?“)

答案 2 :(得分:5)

是的,有一个经常被忽视的一招,可能会在后面咬你: 如果有一些初始化/终结代码,即使在您的单元中没有其他代码调用的代码(始终包含>,始终会执行 强>当你认为它不会)。因此,删除项目中不需要的单元可以产生显着的差异。

另一件值得注意的事情是单位的顺序决定了当两个不同单位中有同音异义词时编译器选择哪个标识符并且你不用前缀来调用它们单位名称(您应该始终将其作为最佳做法)。

除此之外,正如Mason和Rob指出的那样,单位顺序会影响它们的编译顺序和初始化/完成的顺序。

至于代码洞察力,如果你删除不必要的单位会更快,但如果项目中使用的所有单位都明确地添加到dpr而不是依赖于搜索路径来明确地找到它们,那么它会全局删除通过另一个单位添加。

答案 3 :(得分:5)

我强烈不同意梅森和罗布:它确实有所作为!

依赖性减少。

与梅森和罗布所解释的不同之处在于当前项目。相反,区别在于您的NEXT项目。如果在(客户端)单元中保留不必要的(服务器)单元,那么在另一个项目中使用该客户端单元也会引入依赖关系。如果刚刚拉入的单位没有其他合理的客户单位,那么你就增加了膨胀。

答案 4 :(得分:4)

使用免费的Pascal分析器查找代码中未使用的单位。