我正在尝试为 C# (.NET) 创建一个源代码生成器。生成永远不会被调用的属性或方法是否会导致我的代码运行速度变慢?为未使用的库插入“using”语句如何?
我假设编译器足够聪明,不会构建未使用的“using”语句,但它无法了解属性和方法,因为它们可以插入外部应用程序使用。
最佳答案
编译器已经足够聪明,只列出实际使用的最终可执行文件中引用的程序集。无需摆弄程序集引用或使用指令。
JIT 编译器只会为实际调用的方法生成代码。因此,您不会因为从未使用过的代码而产生任何机器代码或编译时间开销。
CLR 正在通过内存映射文件引用您的可执行镜像。仅当 CLR 使用 DLL 中的实际内容时,才会使用 RAM。这取决于您使用的方法的 IL 如何在图像中分布。有合理的可能性,因为 JIT 编译器从不引用 IL,图像数据也不会被分页到 RAM 中。换句话说,您将损失一些虚拟内存空间,但不会消耗相应数量的 RAM。
如果您的 DLL 是强命名的并且存储在不受信任的位置,那么由于文件较大,热启动时间会稍微长一些。
关于c# - 未使用的方法和属性对库或可执行文件的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120112/