我正在为C#(.NET)创建源代码生成器。生成永不被调用的属性或方法会导致我的代码运行得更慢吗?如何为未使用的库插入“using”语句?
我假设编译器足够聪明,不能构建未使用的“using”语句,但是它没有办法知道属性和方法,因为它们可以插入外部要使用的应用程序。
答案 0 :(得分:6)
编译器已足够智能,只能列出实际使用的最终可执行文件中的引用程序集。无需使用汇编引用或使用指令。
JIT编译器只会为实际调用的方法生成代码。因此,由于从未使用过的代码,您将不会有任何机器代码或编译时间开销。
CLR通过内存映射文件引用您的可执行映像。只有在CLR使用DLL中的实际内容时才会使用RAM。这取决于您使用的方法的IL如何通过图像分布。有合理的可能性,因为JIT编译器从不引用IL,图像数据也不会被分页到RAM中。换句话说,您将丢失一些虚拟内存空间,但不会消耗相应数量的RAM。
如果您的DLL名称很强并存储在不受信任的位置,那么由于文件较大,热启动时间会稍长。
答案 1 :(得分:5)
未使用的方法会使可执行文件略大。加载需要更长的时间,并且会消耗更多的系统内存。
如果应用程序在内存受限的环境中运行,您可能会看到性能略有下降。
除此之外,您不应该看到性能下降。
“using”语句只允许您在源代码中编写更短版本的类名。它们不会影响文件大小或执行速度。
有第三方链接器可以从最终的.EXE中删除未引用的方法。
答案 2 :(得分:4)
您应该考虑使用部分方法,尤其是在使用代码生成器时。部分方法(如果它实际上没有实现)将由编译器删除。