2009-07-22 41 views
68

无论何时创建新页面或项目,Visual Studio都会自动为您创建使用语句。其中一些你永远不会使用。未使用的using指令如何影响性能?

Visual Studio具有“删除未使用的用途”的有用功能。

我不知道是否对程序性能有任何负面影响,如果从未访问过的using语句仍然在文件顶部提到。

+0

我在询问之前搜索了它,但没有出现。 – KdgDev 2009-07-22 08:36:14

+5

FWIW,这个帖子有更好的搜索引擎优化:这是谷歌对我的第一个结果。在链接的两个原件中,一个不可用(删除),另一个的措辞不同,以便为该帖子增加一些价值,即使只是作为重定向。 – DaveD 2012-11-02 19:07:44

回答

86

未使用的使用对应用程序的运行时性能没有影响。

它会影响IDE的性能和整个编译阶段。原因是它创建了一个必须在其中进行名称解析的附加名称空间。然而,这些对于大多数情况下的IDE体验应该不会有明显的影响。

由于相同的原因,它也会影响在调试器中评估表达式的性能。

11

不,这只是一个编译时/编码风格的事情。 .NET二进制文件使用完全限定名称。

+1

这是否意味着较长的类名和方法名对JIT编译时间有较小但实际的影响(如果不可估量的话)? – 2010-05-05 23:08:09

5

对执行速度没有影响,但编译速度/智能感知可能会有一些微小的影响,因为有更多潜在的名称空间来搜索适当的类。我不会担心太多,但是您可以使用Organize Usings菜单项来移除和排序使用语句。

4

不,编译程序时涉及多个过程。当编译器开始寻找引用(类,方法)时,它将只使用代码中使用的引用。 using指令仅告诉编译器在哪里查找。很多未使用的使用语句可能会有性能问题,但只是在编译时。在运行时,所有外部代码都被正确链接或包含在二进制文件中。

5

不执行的代码不会影响程序的性能。

1

以下链接A good read on why to remove unused references解释了从应用程序中删除未使用的引用是如何有用的。

下面是从链接的一些摘录:

  1. 通过消除应用程序中的任何未使用的引用,你是 防止CLR从 运行时加载未使用的引用的模块。这意味着您将减少您的应用程序的启动时间,因为加载每个模块需要花费一些时间,并且避免编译器加载永远不会使用的编译器加载元数据 。您可能会发现,根据每个库的大小,启动时间 明显减少。这并不是说你的应用程序在加载后会更快,但它可以非常方便地知道你的启动时间可能会减少。

  2. 删除任何未使用的引用的另一个好处是,您将减少与命名空间冲突的风险。例如,如果 同时引用了System.DrawingSystem.Web.UI.WebControls, 您可能会发现在尝试引用 Image类时会发生冲突。如果您的类中使用了与 这些引用匹配的指令,编译器无法确定要使用哪个指令。 如果您在开发过程中经常使用自动完成功能,删除未使用的 命名空间将会减少键入时 文本编辑器中自动完成值的数量。