引用外部命名空间中的方法/变量比完全包含它更具内存效率吗?

时间:2009-03-12 02:34:06

标签: c#

以下是内存使用的等价物吗?

System.Threading.Thread.Sleep(500);

VS

using System.Threading;
...
Thread.Sleep(500);

我原本以为你在内存中使用的命名空间越少越好,但我听说前一个例子必须将命名空间加载到内存中。我知道Sleep不是内存饥饿方法的最好例子,但它只是一个例子。

3 个答案:

答案 0 :(得分:8)

using语句根本不会导致任何内容被加载,它只会告诉编译器在哪里查找类。

这两个例子产生完全相同的代码。

答案 1 :(得分:3)

这两个在编译时产生完全相同的IL,如其他帖子所述。

但是有一点不同。第一个选项显式地让编译器知道类/方法/结构/等的去向。第二个选项包括命名空间(System.Threading)到编译器的要搜索的命名空间列表中。

如果在using语句中有许多名称空间,则会导致编译器花费更长的时间来编译此文件。使用C#,这可能不是你一直关心的事情,因为编译器非常快,但确实会减慢速度。

有一个非常大的项目和非常大的命名空间(由于其他原因这不是一个好主意),这可能是显而易见的(尽管仍然很微妙)。

答案 2 :(得分:2)

我不相信你可以用“include”语句将“using”语句与plain C语言中的包含意义相提并论 - 当编译CLR代码时,它将忽略实际上没有使用的指定命名空间。组装

using语句适用于:

  • 告诉编译器在哪里寻找类(如Guffa所述)
  • 让开发人员更容易声明类 - 想象必须在每个声明中每次都输入完全限定的类名

编译器将负责优化它,无需担心。