为什么要删除不必要的C#using指令?

ste*_*enj 212 c# assemblies using

例如,我很少需要:

using System.Text;
Run Code Online (Sandbox Code Playgroud)

但它默认始终存在.我假设如果您的代码包含不必要的using指令,应用程序将使用更多内存.但还有什么我应该知道的吗?

另外,如果只在一个文件和大多数/所有文件中使用相同的using指令,它会有什么不同吗?


编辑:请注意,这个问题与被称为using语句的无关概念无关,旨在通过确保当对象超出范围时调用其IDisposable.Dispose方法来帮助管理资源.请参阅C#中"使用"的使用.

Pop*_*lin 469

用于删除未使用的使用(S)/命名空间,除了编码偏好几方面的原因:

  • 删除项目中未使用的using子句可以使编译更快,因为编译器具有较少的命名空间来查找要查找的类型.(对于C#3.0尤其如此,因为扩展方法,编译器必须在所有名称空间中搜索扩展方法,以获得更好的匹配,泛型类型推断和涉及泛型类型的lambda表达式)
  • 当新类型添加到与使用的命名空间中的某些类型同名的未使用的命名空间时,可能有助于避免在将来的构建中发生名称冲突.
  • 编码时会减少编辑器自动完成列表中的项目数,从而可以更快地打字(在C#3.0中,这也可以减少显示的扩展方法列表)

删除未使用的命名空间不会做什么:

  • 以任何方式改变编译器的输出.
  • 以任何方式改变已编译程序的执行(更快的加载或更好的性能).

得到的组件是相同的,有或没有未使用的使用.

  • +1 _This_应该标记为答案:) (14认同)
  • 关于更快的编译:`.cs`文件中未使用的`using`指令可以防止你从`.csproj`项目中删除一些(否则未使用的)_assembly references_.如果您有许多项目的"解决方案",项目之间不必要的引用将强制项目按特定顺序编译,而实际上它们是独立的并且可以并行编译.因此,在检查多项目解决方案中未使用的项目引用之前,请删除未使用的`using`指令. (5认同)
  • 在修改文件时,最终会在文件开头添加越来越多的命名空间.因此,如果您不删除未使用的命名空间,则在打开文件时,您看到的只是一个巨大的命名空间列表而不是实际实现. (3认同)

Dar*_*opp 178

程序运行时不会改变任何内容.所需的一切都按需加载.因此,即使您具有该using语句,除非您实际使用该命名空间/程序集中的类型,否则将不会加载与使用语句相关的程序集.

主要是,只是为了个人喜好清理.

  • 但它会影响编译时间和Intellisense/IDE响应能力. (67认同)

cor*_*ore 36

代码清洁度重要.

当人们看到多余的使用时,人们开始感觉到代码可能没有维护并且在眉地路径上.从本质上讲,当我看到一些未使用的使用声明时,脑后会出现一个小黄旗,告诉我"谨慎行事".读取生产代码永远不应该给你那种感觉.

所以清理你的使用.不要马虎.激发信心.让你的代码漂亮.给另一个开发者带来温暖模糊的感觉.


Fra*_*nov 30

没有IL构造对应using.因此,using语句不会增加应用程序内存,因为没有为其生成的代码或数据.

Using仅在编译时用于将短类型名称解析为完全限定类型名称的目的.因此,不必要的唯一负面影响using是在编译期间稍微减慢编译时间并占用更多内存.不过我不会担心.

因此,具有using您不需要的语句的唯一真正的负面影响是智能感知,因为在您键入时可能的匹配列表会增加.