有不必要的参考和使用会有什么后果?


12

我有些怪异,并且倾向于通过清除using每个类中的引用和s 来保留我的项目,以仅保留实际使用的内容。

我还能提出什么其他论据(除了使我的OCD平静下来)保持基本要领?我主要在考虑系统参考,对自定义工作的任何参考都会带来很多向后兼容性的问题。发行版占用空间更大吗?编译时间更长?


5
请注意,usings和引用不是同一件事。许多答案都没有考虑到这一点。
phoog

1
如果您希望保持代码的清洁并减少使用量,请考虑购买ReSharper。Visual Studio的惊人扩展。我不能没有/生活/编程。;-)
Anders

Answers:


13

如果您保持using最低状态,Intellisense将对您有用得多,这是一个很大的优势。

除此之外,我认为没有任何收获。因此,也许C#编译器的运行速度可以提高1%。所以呢。


1
1%的累积值是相当大的……但是从根本上来说,您希望编译器可以将任何问题都优化。但是,我不会感到简单整洁
Murph

从2005年左右开始,C#IntelliSense一直有点混乱,当时他们开始将绝对的一切都转储到列表中。
宫阪丽

@ReiMiyasaka,以便您可以随意获取IntelliSense,然后Ctrl+.快速修复“添加名称空间XYZ
kizzx2 2011年

1
@Murph:不管最终1%的累积值有多大,它仍将是累积总数的1%,因此始终是无关紧要的。另外,编译器using在确定它们实际上是不必要的之前不能忽略任何s,但除非首先编译了整个源文件,否则它无法确定。与项目引用一样,它们不会因为似乎未使用而被丢弃,因为它们可能以动态方式(在编译时无法检测到)使用。
Mike Nakis 2011年

1
有点晚了,但就我而言,我们正在为资源非常有限的设备创建一个应用程序。添加不必要的引用将影响最终应用程序的大小。而且,我们将尝试分发该程序包并与其他程序包竞争,较大的程序包可能会使用户对是否下载该应用程序三思而行。
hmadrigal 2013年

9

由于在Visual Studio中完成此操作实际上很简单(单击鼠标右键),为什么不这样做呢?

这与Occam的Razor一致,只是简单的工程设计。

关于不这样做的后果,请考虑如果其他一些开发人员试图打开您的项目并且该项目包含(未使用的)对他/她的计算机上没有的库的引用(未使用)会发生什么。现在,可怜的开发人员需要弄清楚为什么存在该未解决的引用以及如何处理。

如果您愿意,请按照黄金法则考虑。您是否要接管一个项目,该项目具有很多您在计算机上没有的库的引用,并且您不知道它们为什么在那里?


+1,有一个外接程序可以针对整个解决方案执行此操作。这也让我想起了ClojureScript和Google Closure视频,其中的整个程序优化非常重要,因为典型的网页现在约为1MB。有一个好习惯-清洁不需要的东西。
工作

6

using语句只是让编译器能够完全引用类等。额外的using语句对编译时间没有明显影响。

另外,运行时直到实际需要时才加载引用的程序集,因此我再次相信不需要的引用不会有任何负面影响。

如果使用Reflector之类的工具,查找和删除这些不必要的位几乎可以自动进行,所以我想花很多时间在这些活动上是浪费时间。例如,一两个小时的手动删除不需要的using语句的费用要比Reflector许可证的费用要高-并且它还具有许多其他提高生产力的功能。


VS的清洁功能是VS 2010的内置功能(我认为也是2008)。ReSharper也可以做参考。但是,是的,在开始进行大规模清理之前,我会考虑使用一种工具来为我完成此任务。
MPelletier

+1,用于明确表示未使用usings和未使用引用之间的区别。两者有很大的不同!
phoog

1

除了上述内容,我想这里还没有提到,每个引用都需要一个.NET框架或一个外部DLL中的组件。如果是对外部DLL的引用,则在运行软件时(和位置)都需要具有该引用。

编辑-根据下面phoog的有效评论:如果未使用DLL,并且仅由于将其添加到引用中,则不需要随应用程序一起提供DLL,该应用程序仍将运行。为了处理代码中未使用的引用,您可能需要看一下:删除未使用的引用


1
如果未使用引用,则在运行软件的时间和位置都不需要DLL。
phoog

@phoog,感谢您的评论。至少在.NET VS2010中,如果手动添加对解决方案的引用,则即使未在代码中使用DLL,也会将DLL物理添加到bin文件夹中。
NoChance 2011年

1
但是,如果从bin文件夹中删除DLL,或者发布不带DLL的应用程序,则该应用程序仍应运行。
phoog 2011年

@phoog,您是正确的,感谢您指出这一点。我将编辑帖子。
NoChance 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.