C#中未使用的"using"指令对性能的影响

23

只是好奇。

如果我在代码文件开头添加多个不在我的代码中使用的using指令,这会有影响吗?像这样:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.IO;
//using blah.. blah.. blah..;

public class myClass
{
    // Class members
}
  • 它会对我的应用程序的内存使用产生不良影响吗?

  • 它会对我的应用程序的性能产生不良影响吗?

我知道删除它们是一个好的做法,我们有完整支持 .Net IDE 来完成此操作,但我只是好奇想了解一下。


4
不,这只影响编译时间。 - Hamlet Hakobyan
2
如果您使用ReSharper,您可以使用它来查找并删除未被引用的“using”语句。http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Usage_Scenarios__Optimizing_Using_Directives.html - mortb
8
术语纠正 - 这些是“using指令”。而“using语句”是出现在方法中的,用于自动调用“Dispose”的语句。 - Jon Skeet
3
CodeMaid是一个免费的工具,不像resharper,它可以“清理”整个解决方案。您可以轻松删除所有未使用的using。话虽如此,正如VinayC所说using只是编译器助手。 - Steve B
显示剩余4条评论
4个回答

20

使用Using指令不会对最终应用程序产生任何内存/性能影响-它们只是编译器提供的一些快捷方式,用于处理长类型名称。编译器使用这些命名空间来将未限定(或部分限定)的类型名称解析为正确的类型。


8
更确切地说,在.NET CLR中没有“使用”这个概念。这仅仅是编译器的帮助,让您不必输入完整的命名空间。编译后,您引用的每个类(仅限于这些类)都会链接到完整名称,生成的字节码中不会留下任何“using”的痕迹。 - TomTom

15

为了完整起见,为此生成的 IL 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Hello World!");
        }
    }
}

以及这个:

class Program
{
    static void Main(string[] args)
    {
        System.Console.Write("Hello World!");
    }
}

完全相同:

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello World!"
  IL_0006:  call       void [mscorlib]System.Console::Write(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method Program::Main

8

您的应用程序没有性能损失。这只是您使用的一种快捷方式,可避免键入完整的限定符。例如:

var f = new File()

而不是

var f= new System.IO.File();

然而,这确实会在一定程度上影响您的开发环境(IDE)的性能,因为您使用的 using 语句越多,自动完成缓存就越大。这会使查找时间略微变慢。但通常这几乎不会被注意到。

然而,此建议不适用于向项目添加程序集引用。如果您将引用添加到 MyGloriousLibrary.DLL,却从未使用它,则可能会遇到麻烦。


4

这不会对应用程序的总体性能或内存使用产生影响。using指示仅在编译时存在,因此您无需每次都写出完整的类名。一旦代码被编译,这些指示就不再存在了(编译后的代码始终使用完整的类型名称)。


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