【问题标题】:Performance impact of unused "using" directives in C#C# 中未使用的“使用”指令对性能的影响
【发布时间】:2013-01-12 21:18:18
【问题描述】:

只是好奇。

如果我在代码文件的开头添加多个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 的短期全面支持这样做,但我只是想知道它。

【问题讨论】:

  • 不,它只是影响你的编译时间。
  • 如果您使用 resharper,您可以使用它来查找和删除未引用的 using 语句。 jetbrains.com/resharper/webhelp/…
  • 术语 nitpick - 这些是 using 指令using statements 是出现在方法等中的那些,自动调用Dispose
  • CodeMaid,与 resharper 不同的是 免费,可以“清理”整个解决方案。您可以轻松删除所有未使用的using。也就是说,作为VinayC saidusing 只是一个编译器助手。

标签: c# .net performance


【解决方案1】:

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

【讨论】:

  • 更准确地说:.NET CLR 中没有“使用”的概念。这纯粹是一个编译器帮助,因此您不必键入完整的命名空间。后编译器,您引用的每个类(并且只有那些)都与全名链接,生成的字节码中不会留下任何使用痕迹。
【解决方案2】:

为了完整起见,为此生成的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

【讨论】:

    【解决方案3】:

    您的应用程序没有性能问题。这只是您用来避免输入整个限定条件的快捷方式。例如

    var f = new File()
    

    而不是

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

    但是。它确实会在一定程度上影响您的开发环境 (IDE) 的性能,因为您使用的 using 语句越多,自动完成缓存的增长就越大。这使得查找时间稍慢。但这通常很难引起注意。

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

    【讨论】:

      【解决方案4】:

      它根本不会影响应用程序的整体性能或内存使用情况。 using 指令在编译时就在那里,因此您不必每次都写出完整的类名。一旦你的代码被编译(编译的代码总是使用完整的类型名称),这些指令就没有任何剩余了。

      【讨论】:

        猜你喜欢
        • 2010-11-12
        • 1970-01-01
        • 1970-01-01
        • 2012-12-10
        • 2021-09-15
        • 1970-01-01
        • 2010-09-11
        • 1970-01-01
        • 2015-04-27
        相关资源
        最近更新 更多