230

例如,我很少需要:

using System.Text;

但默认情况下它总是在那里。如果您的代码包含不必要的using 指令,我假设应用程序将使用更多内存。但是还有什么我应该注意的吗?

此外,如果仅在一个文件与大多数/所有文件中使用相同的 using 指令,它是否有任何区别?


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

4

14 回答 14

491

除了编码偏好之外,删除未使用的使用/命名空间的原因很少

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

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

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

无论是否删除了未使用的使用,生成的程序集都是相同的。

于 2008-09-25T22:39:58.933 回答
185

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

主要是为了清理个人喜好。

于 2008-09-25T21:31:32.687 回答
38

代码清洁度重要。

当人们看到多余的使用时,人们开始感觉到代码可能是无人维护的,并且在 browfield 路径上。本质上,当我看到一些未使用的 using 语句时,我的脑后会升起一面小黄旗,告诉我“谨慎行事”。阅读生产代码永远不会给你那种感觉。

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

于 2008-09-25T22:35:50.300 回答
30

没有对应于using. 因此,这些using语句不会增加您的应用程序内存,因为没有为其生成代码或数据。

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

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

于 2008-09-25T21:35:58.433 回答
4

如果您将类称为命名空间中的(未使用的)类,则可能会发生名称冲突。对于 System.Text,如果您定义一个名为“Encoder”的类,就会遇到问题。

无论如何,这通常是一个小问题,并被编译器检测到。

于 2008-09-25T21:36:23.283 回答
2

您的应用程序不会使用更多内存。编译器可以找到您在代码文件中使用的类。除了不干净之外,它真的没有伤害。

于 2008-09-25T21:31:47.287 回答
2

主要是个人喜好。我自己清理它们(ReSharper 很好地告诉我什么时候不需要使用语句)。

有人可以说它可能会减少编译时间,但随着当今计算机和编译器的速度,它不会产生任何明显的影响。

于 2008-09-25T21:34:25.503 回答
2

留下额外的using指令很好。删除它们有一点价值,但没有多大价值。例如,它使我的 IntelliSense 完成列表更短,因此更易于导航。

编译的程序集不受无关using指令的影响。

有时我把它们放在一个 里面#region,然后让它折叠起来;这使得查看文件更清晰。IMO,这是#region.

于 2008-09-25T22:07:05.533 回答
2

如果您想保持代码干净,using则应从文件中删除未使用的语句。当您在一个需要了解您的代码的协作团队中工作时,好处显得非常明显,认为您的所有代码都必须维护,更少的代码=更少的工作,好处是长期的。

于 2018-06-08T16:04:09.323 回答
1

它们只是用作捷径。例如,如果您没有 using System,则每次都必须编写: System.Int32;在上面。

删除未使用的只会让你的代码看起来更干净。

于 2008-09-25T21:35:19.043 回答
1

using 语句只是让您无法限定您使用的类型。我个人喜欢清理它们。实际上,这取决于如何使用 loc 指标

于 2008-09-25T22:15:45.420 回答
1

只有您实际使用的命名空间允许您将代码记录在案。

您可以通过任何搜索工具轻松找到代码的哪些部分相互调用。

如果您有未使用的命名空间,则在运行搜索时这没有任何意义。

我现在正在清理命名空间,因为我经常被问到应用程序的哪些部分以一种或另一种方式访问​​相同的数据。

我知道哪些部分正在以各种方式访问​​数据,因为数据访问被命名空间分隔,例如直接通过数据库和间接通过 Web 服务。

我想不出一种更简单的方法来一次完成这一切。

如果您只是希望您的代码成为一个黑匣子(对开发人员而言),那么没关系。但是,如果您需要随着时间的推移对其进行维护,那么它就像所有其他代码一样是有价值的文档。

于 2014-02-25T13:52:42.953 回答
0

'using' 语句不会影响性能,因为它只是限定标识符名称的助手。因此,不必输入System.IO.Path.Combine(...) ,如果您使用 System.IO,您可以简单地输入Path.Combine(...)

于 2008-09-25T21:32:06.460 回答
0

不要忘记编译器在构建项目时会做很多工作来优化所有内容。在很多地方使用它,或者 1 不应该在编译后做不同的事情。

于 2008-09-25T21:32:20.780 回答