在.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会自动分析优化引用

多余的Using Namespaces或引用会影响程序的执行效率么?的更多相关文章

  1. 多余的Using Namespaces或引用会影响程序的执行效率么?(转)

    转自:http://www.cnblogs.com/Interkey/p/UsingNameSpace.html 多余的Using Namespaces或引用会影响程序的执行效率么? 在.NET程序编 ...

  2. SQL Server 并行操作优化,避免并行操作被抑制而影响SQL的执行效率

    为什么我也要说SQL Server的并行: 这几天园子里写关于SQL Server并行的文章很多,不管怎么样,都让人对并行操作有了更深刻的认识. 我想说的是:尽管并行操作可能(并不是一定)存在这样或者 ...

  3. 关于数据库优化2——关于表的连接顺序,和where子句的前后顺序,是否会影响到sql的执行效率问题

    有好多时候,我们常听别人说大表在前,小表在后,包括现在好多百度出来的靠前的答案都有说数据库是从右到左加载的,所以from语句最后关联的那张表会先被处理.如果三表交叉,就选择交叉表来作为基础表.等等一些 ...

  4. 这台计算机上缺少此项目引用的 NuGet 程序包-缺少的文件是 ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props

    异常处理汇总-开发工具  http://www.cnblogs.com/dunitian/p/4522988.html 协助开发里面总有几个是极简爱好者,但是呢删了不该删的就会影响项目开发,下面看下完 ...

  5. 从系统的角度分析影响程序执行性能的因素——SA20225205 黄兴宇

    实验总结分析报告:从系统的角度分析影响程序执行性能的因素 1.请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的.自洽 ...

  6. 参数探测(Parameter Sniffing)影响存储过程执行效率解决方案

    如果SQL query中有参数,SQL Server 会创建一个参数嗅探进程以提高执行性能.该计划通常是最好的并被保存以重复利用.只是偶尔,不会选择最优的执行计划而影响执行效率. SQL Server ...

  7. 这台计算机上缺少此项目引用的 NuGet 程序包,DotNetCompilerPlatform

    严重性 代码 说明 项目 文件 行 禁止显示状态错误 这台计算机上缺少此项目引用的 NuGet 程序包.使用“NuGet 程序包还原”可下载这些程序包.有关更多信息,请参见 http://go.mic ...

  8. 这台计算机上缺少此项目引用的Nuget程序包,请参考链接 不给出缺什么包的提示。

    这台计算机上缺少此项目引用的Nuget程序包,请参考链接   不给出缺什么包的提示. 解决办法: 1.卸载当前解决类库. 2.编辑当前项目类库文件. 3.删除节点 <Target Name=&q ...

  9. 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包

    将项目复制到其地方的时候编译会报错,按照官网方法也不行,从网上查了一个有用的方法如下 打开CSPROJ文件.删除如下代码,  <Import Project="..\packages\ ...

随机推荐

  1. ECshop设置301最快捷最简单的方法

    ECshop设置301最快捷最简单的方法 在 init.php中加入以下代码 if (strtolower($_SERVER['SERVER_NAME'])!='www.fz1688.com') { ...

  2. android Animation 动画绘制逻辑

    参考:http://www.jianshu.com/p/3683a69c38ea 1.View.draw(Canvas) 其中步骤为:/* * Draw traversal performs seve ...

  3. iOS杂谈-我为什么不用Interface builder

    在互联网上关于Interface Builder的争吵每天都在发生,用和不用大家都有一大堆的理由.最近看了这篇文章,很多地方和作者有共鸣,结合自己的一些经历,就有了你现在所看到的东西,你可以把它当成前 ...

  4. DIV实现纵向滚动条overflow-y

    DIV实现纵向滚动条overflow-y:scroll的使用, 1.首先设置固定div的宽高2.overflow-y:scroll如果设置overflow:auto;表示当你内容超过div高度出现滚动 ...

  5. POJ 2853 Sequence Sum Possibilities

    Sequence Sum Possibilities Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5537   Accep ...

  6. QPaintDevice: Cannot destroy paint device that is being painted

    在paintEvent中,使用QPainter * 绘制图像出现此问题.解决: 1.改为不使用QPainter指针. 2.添上begin(), end() QPainter * painter = n ...

  7. 实现TabView(页签)效果

    今天花了点时间,设计了一个网页上用的tabview(页签.tabcontrol)效果.个人觉得实现得比较不错,网页元素用得比较少,js代码也比较精练.测试了一下支持IE.FireFox以及chrome ...

  8. Struts2知多少(2) Struts2 是什么

    Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构. WebWork框架开始以Struts框架为基础 ...

  9. WCF学习之二

    今天在照着网上教程做练习的时候,用IE浏览器运行的时候遇到了一些问题 “找不到类型“WCFService.Service1”,它在 ServiceHost 指令中提供为 Service 特性值,或在配 ...

  10. 浅析LRU(K-V)缓存

    LRU(Least Recently Used)算法是缓存技术中的一种常见思想,顾名思义,最近最少使用,也就是说有两个维度来衡量,一个是时间(最近),一个频率(最少).如果需要按优先级来对缓存中的K- ...