我有一个类库,我只使用它的一部分。是否需要删除未使用的内容以缩小创建的代码的大小(在发布配置中)?
据我所知,编译器会处理这个问题,删除代码不会改变EXE文件的大小。这总是如此吗?删除所有不需要的代码需要很长时间,所以我想知道是否需要它。
更多信息:类库中的方法和类没有从执行代码中调用,而是由类库中的其他代码部分引用(它们本身从不被调用)。
答案 0 :(得分:36)
不,编译器也包含“死”代码。一个简单的原因是,并不总是能够确切地知道将要执行和不执行的代码。例如,即使是从未引用的私有方法也可以通过反射调用,公共方法可以由外部程序集引用。
您可以使用工具来帮助您查找和删除未使用的方法(包括仅由其他未使用的方法调用的方法)。尝试What tools and techniques do you use to find dead code?和Find unused code让您入门。
答案 1 :(得分:6)
这一切都得到了编译。无论是否被召唤。代码可以由外部库调用。
使编译器忽略代码的唯一方法是使用编译器预处理器指令。有关here的更多信息。
答案 2 :(得分:0)
我怀疑编译器会删除任何东西。事实上,编译器无法分辨使用什么和不使用什么,因为可以实例化类型和名称调用方法,这要归功于反射。
答案 3 :(得分:0)
假设有一个名为Utility
的类库。您创建了一个新项目并将此类库添加到该项目中。即使你的EXE只调用类库中的1-2个方法,删除未引用的代码也不是一个好主意。
这将违背重新使用的原则。尽管库中存在一些与EXE无关的类,但它不会对程序的性能或大小产生任何不良影响。
答案 4 :(得分:0)
在大多数语言中,确定所有且唯一的死代码是(如果一个人理想化的那个人有一个"数学世界"就像语言一样)递归地不可判定。 (一些罕见的像Blaise语言是可以判定的。)
答案 5 :(得分:0)
是否存在“需要删除不使用的内容以缩小所创建代码的大小”的问题:我认为这仅对节省网络带宽有用。删除未使用的代码对于提高Web应用程序的加载速度等至关重要。
如果您的代码是exe或库,我看到要删除无效代码的唯一原因是提高代码质量。这样一来,只要有人看着您的代码2年后,就不会再想知道它的作用了。