未使用的using语句

27

我可能已经知道这个问题的答案,但我还是认为问一下是值得的。如果我的代码文件中有一堆没有被使用的 using 语句;

  1. 这会对性能造成什么样的负面影响吗?
  2. 编译器在编译/运行时如何处理它们?

谢谢


4
你在谈论使用指令(directives)还是语句(statements)? - icecrime
您是指运行时性能还是编译器性能?根据定义,编译器在运行时不处理它们。 - Simone
重复的问题:https://dev59.com/fXVC5IYBdhLWcg3w9GHM? - John Warlow
使用语句,同时我谈的是运行时性能而不是编译时性能。 - user448374
@Jon - 不存在“未使用的using语句”这样的东西...我猜你指的是像"using System.Xml;"这样的指令。而语句是"using(var conn = CreateConnection()) {...}"。 - Marc Gravell
1
@Marc,我的错...我以为我的问题非常简单明了...但我想不是这样。 - user448374
6个回答

24

这会对性能有不良影响吗?

不会。

编译器在编译和运行时如何处理它们?

在编译时,它们的作用就像你所期望的那样,即作为命名空间导入。它们不会出现在编译后的二进制文件中:任何对类型的引用都使用完全限定名称。

即使不需要,编译器也会检查 using 语句中的命名空间;如果删除一个命名空间,则所有引用它的 using 语句都将失败。

对我而言,多余的 using 语句就像多余的注释一样。它们对编译器没有任何影响,但是如果包含太多这样的语句,就可能会让开发者感到困惑。


8

它不会影响运行时性能

它可能会略微增加编译时间,因为:

1)编译器需要解析更多字符
2)它必须在更多的候选标识符中查找。但由于这可能使用哈希表,所以代价不应该太大。

我猜编译器减速可以忽略不计

我猜它会稍微减慢Intellisense,因为它要显示和过滤的列表会变得更长。

删除未使用的using语句更多是一种风格上的改进,而不是性能改进。并且您需要注意扩展方法,因为它们通过using语句引入范围。例如,即使当前未使用,我也不会删除using System.Linq


不是很相关,但您能否解释一下为什么不想删除“using System.Linq”?我不太明白。 - Roman
@Roman 因为我喜欢在Intellisense中显示LINQ方法。 - CodesInChaos
是的,可能只有Intellisense基础设施可以谈论未使用的usings的性能。 - Steve

2

在运行时没有性能影响。但是,许多命名空间可能会使您的代码完成速度变慢,并降低生产力。


1

在运行时不会有性能损失,使用操作在编译时解析,无用的操作被忽略。


0

0

这可能会增加编译时间,但对运行时性能要么没有影响,要么影响微乎其微。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接