在.NET程序编写中,需要using相应命名空间或添加相应的References,可有时候没有使用到的命名空间也被添加到了Using Namespaces中,那么,这样会影响程序的执行效率么?
通过示例说明:
新建一Windows 控制台应用程序(基于.NET Framework 2.0)后项目代码里自动会添加
using System; using System.Collections.Generic; using System.Text;
三项命名空间的引用。
同时,在项目中的“引用”中自动添加了对 "System"、"System.Data"、"System.Xml" 的引用。
编译生成!
用反编译软件(ILSpy、.NET Reflector等)打开生成的应用程序。
(当然也可以将目标语言设置成IL查看IL代码,也可以通过自带的Ildasm.exe将生成的应用程序反编译成IL代码查看引用情况)
可以看到除了"using System;"外的其他using Namespaces语句都不在反编译得到的代码中。而"System"是Console静态类所在的命名空间。
而"引用"对应的"References"中只有一个"mscorlib",因为mscorlib.dll (多语言标准通用对象运行时库:Microsoft Standard Common Object Runtime Library)是CRL的必备,所以默认都已引用;而除了mscorlib.dll外的其他程序集都需要显式引用。更多请参考:类集与名称空间的关系
将未被引用到的Using Namespaces和References移除后,继续编译依然可以完成:
也就是说程序在编译过程中,多余的未被引用的命名空间或References不参与编译。
另外,C#,VB.NET是解释型语言,由JIT即时编译,所以即使定义了未用到的变量,也不会影响程序的执行效率。
所以本人认为未被引用的Using Namespaces或References在程序编译时有一定的影响,但在程序执行时没性能影响。(仅从反编译角度,是不是有些牵强)
而默认添加的命名空间是最常用的,为了方便快速使用。
如有误,欢迎分析指正~
本文地址:http://www.cnblogs.com/Interkey/p/UsingNameSpace.html
对于代码有洁癖的可以直接在Visual Studio的代码文档中 右键-组织using-移除和排序 命令将未被引用的using语句移除。(Visual Studio 2008及更高版本才有此菜单项)
本文参考了以下内容:
Namespaces
vs中程序集的引用
using了用不到的命名空间会影响服务器效率吗
正确区分类集、模块和名称空间
.NET会自动分析优化引用