IL 代码不反映 C#using
运行时性能
在嵌套命名空间中以这种方式使用 USING 指令是否有好处?比如内存管理还是JIT编译器?
因为您询问的是运行时性能,所以这里看看源代码下面发生了什么。
如果您使用Microsoft 的 IL Diassembler 工具查看编译后的 IL 代码(就像我们在这里所做的那样),您将看到所有类名始终都是完全限定的,无论程序员如何using
在源代码中使用。
在下面的编译 IL 代码示例中,using
虽然在原始 C# 源代码文件中,但没有看到“快捷方式”机制。例如,IL 描述了一个 longextends [System.Web]System.Web.UI.Page
而 C# 会使用: Page
and also using System.Web.UI;
(两个单独的语句)。
// ***** Compiled MSIL CODE ****
// Notice all fully qualified classes throughout.
//
.class public auto ansi beforefieldinit WebApplication1.process
extends [System.Web]System.Web.UI.Page
{
.field family class [System.Web]System.Web.UI.HtmlControls.HtmlForm form1
.method family hidebysig instance void
Page_Load(object sender,
class [mscorlib]System.EventArgs e) cil managed
{
// Code size 95 (0x5f)
.maxstack 4
.locals init ([0] string strName,
[1] string strTime)
IL_0000: nop
IL_0001: ldarg.0
IL_0002: call instance class [System.Web]System.Web.HttpRequest [System.Web]System.Web.UI.Page::get_Request()
IL_0007: ldstr "name"
IL_000c: callvirt instance string [System.Web]System.Web.HttpRequest::get_Item(string)
在编译的 IL 中,所有类都是完全限定的。
这意味着基于设计时using
语句在运行时没有性能优势或劣势。
编译时间
根据您在源代码中分散using
s 和namespace
s 的方式,可能会有或多或少的关键字。编译器必须看到它们并处理它们,但与编译器必须做的所有事情相比,编译性能对于这样微不足道的事情来说是可以忽略不计的。
设计时间优势
命名空间是一种组织技术,using
是在源代码级别管理它们的一种方式(并指示编译器如何使用它们,以便它可以相应地编译程序)。当 C# source 指定using System.Web.UI;
时,不会导入任何内容并且文件大小不会变大(因为程序集已被引用);相反using
,它只是从使用的范围内对该命名空间的内容产生更短的语法using
,无论是在整个文件范围内还是在文件内声明的命名空间范围内。
对程序员的好处是减少了多个命名空间之间的模棱两可的类名冲突,using
如果它们被明智地使用的话。
源代码命名空间的组织在编译的 IL 代码中以不同的方式表示(如上例所示)。