当前位置:  开发笔记 > 编程语言 > 正文

"删除未使用的引用"的目的是什么

如何解决《"删除未使用的引用"的目的是什么》经验,为你挑选了4个好方法。

我已经读过删除未使用的引用对编译器没有任何影响,因为它忽略了代码本身没有引用的程序集.

但我觉得很难相信,因为那么,删除未使用的引用的真正目的是什么?它对生成的组件的大小或其他方面没有任何明显的影响.或者这种智能行为仅限于C#编译器(csc.exe)而不是vbc.exe固有的?

如果此功能如此无用,为什么ReSharper将其作为功能提供?为什么在Visual Studio项目配置对话框中提供它?

我能想到的唯一有用的活动是在部署期间.安装程序仍会复制引用(已使用或未使用).但对于驻留在GAC中的程序集(例如,BCL程序集),这也不是问题.



1> Arnshea..:

它可以防止CLR在运行时加载引用的模块.这将减少启动时间(因为加载每个模块需要时间).根据模块的大小,它可能会显着减少启动时间.

测试这种方法的一种方法是创建一个测试WinForms项目,添加对未使用的程序集的引用(例如,System.Web)然后运行并附加到可执行文件(例如,F5).查看加载的模块(Debug - > Windows - > Modules),您将看到引用的程序集已加载.

如果你考虑一下,CLR很难确定是否真的使用了一个依赖项(它在清单中作为依赖项,一旦你添加对它的引用)...特别是因为执行了一些代码路径不能提前知道......



2> Christophe H..:

除了源文件较小外,我认为拥有一个没有未使用的代码或引用的干净源文件会更好.


它更好,因为您的源文件不会膨胀将使用未使用的代码/导入,因此将更容易阅读和理解.另外,我认为编译器的工作量较少,编译速度会快一点.(我不是100%肯定,这是编译器特定的)

3> Guffa..:

Visual Studio 2008还具有删除未使用的using指令的功能.

删除未使用的代码会使代码更整洁,但您也可以降低冲突风险.有时在不同的程序集中有相同名称的类.例如,ImageSystem.Drawing和中都有一个类System.Web.UI.WebControls.如果您对两个名称空间都使用了指令并开始使用Image类,则编译器无法确定要使用哪个名称空间.



4> Hans Passant..:

这是一个优化,使您的项目编译更快.它避免了编译器加载永远不会使用的元数据.这是次要的,我估计大约50毫秒,具体取决于硬盘的速度和文件系统缓存状态.

C#编译器非常智能,只能在已编译程序集的元数据中为实际使用的程序集发出.assembly引用.因此,您不会为运行Ngen.exe时不使用的程序集生成本机映像.JIT编译器不会受到任何影响,只会根据需要加载程序集来转换IL.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有