一个未使用的using指令如何影响性能?

135

每当您创建新页面或项目时,Visual Studio会自动为您创建using语句。其中一些您可能永远不会使用。

Visual Studio有一个有用的功能,可以“删除未使用的using语句”。

如果在文件顶部保留未被访问的using语句,是否会对程序性能产生负面影响,我想知道。


在提问之前,我已经搜索过了,但是没有找到相关内容。 - KdgDev
7
值得一提的是,这篇帖子的SEO效果更好:对我来说,在谷歌中它是第一个结果。其中链接的两个原始帖子中,一个无法访问(已删除),另一个措辞有所不同,即使只是作为重定向,也可以为这篇帖子增加一些价值。 - DaveD
1
@DaveD,你先看吧,因为谷歌知道你的确切喜好和搜索历史。在我朋友的电脑上并不是第一个显示的。 - ilias iliadis
6个回答

162

一个未使用的“using”对应用程序的运行时性能没有影响。

它可能会影响IDE和整体编译阶段的性能。原因是它创建了一个额外的命名空间,其中必须进行名称解析。但这些影响通常很小,对于大多数情况,不应该对IDE体验产生明显的影响。

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


49
使用越多,智能感知就会变得越慢。 - Riegardt Steyn

16
以下链接介绍了为什么要移除未使用的引用,它解释了从应用程序中移除未使用的引用是如何有用的。
以下是该链接中的一些摘录:
  1. 通过移除应用程序中未使用的引用,您可以防止CLR在运行时加载未使用的已引用模块。这意味着您将减少应用程序的启动时间,因为加载每个模块需要时间,并避免编译器加载永远不会使用的元数据。您可能会发现,根据每个库的大小而言,您的启动时间显著减少。这并不是说加载后您的应用程序会更快,但知道启动时间可能会减少还是很方便的。

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


2
所有其他答案都与之相矛盾。所以我猜这不是真的或者不相关?有谁真正知道可以确认一下吗? - Tillito

16

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


4
这是否意味着更长的类名和方法名会对JIT编译时间产生微小但实际(尽管无法测量)的影响? - Jared Updike

8

对于执行速度没有影响,但是编译速度/智能感知可能会稍微受到一些影响,因为有更多的潜在命名空间需要搜索适当的类。我不会太担心它,但是你可以使用“组织Using”菜单项来删除和排序using语句。


6

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


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

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