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

yog*_*ogi 19 .net c# performance

只是好奇它.

如果我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
}
Run Code Online (Sandbox Code Playgroud)
  • 它对我的应用程序的内存使用有不良影响吗?

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

我知道删除它们是一个好习惯,我们完全支持.Net IDE这样做,但我很想知道它.

Vin*_*ayC 17

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

  • 更确切地说:.NET CLR中没有"使用"的概念.这纯粹是一个编译器帮助,所以你不必键入完整的命名空间.后编译器,您引用的每个类(并且只有那些)与全名链接,生成的字节码中不会留下任何使用痕迹. (8认同)

And*_*son 12

为了完整起见,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!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

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

完全一样:

.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
Run Code Online (Sandbox Code Playgroud)


Cap*_*chi 8

您的应用程序没有性能命中.这只是您用来避免输入整个资格的捷径.例如

var f = new File()
Run Code Online (Sandbox Code Playgroud)

代替

var f= new System.IO.File();
Run Code Online (Sandbox Code Playgroud)

然而.它会影响开发环境(IDE)的性能,因为您使用的语句越多,自动完成缓存就越大.这使查找时间略微变慢.但这通常难以察觉.

但是,此建议不适用于向项目添加程序集引用.如果您添加对MyGloriousLibrary.DLL的引用并且从不使用它,那么您将度过一个糟糕的时光.