c# - 未使用的方法和属性对库或可执行文件的影响

标签 c# .net code-generation

我正在尝试为 C# (.NET) 创建一个源代码生成器。生成永远不会被调用的属性或方法是否会导致我的代码运行速度变慢?为未使用的库插入“using”语句如何?

我假设编译器足够聪明,不会构建未使用的“using”语句,但它无法了解属性和方法,因为它们可以插入外部应用程序使用。

最佳答案

编译器已经足够聪明,只列出实际使用的最终可执行文件中引用的程序集。无需摆弄程序集引用或使用指令。

JIT 编译器只会为实际调用的方法生成代码。因此,您不会因为从未使用过的代码而产生任何机器代码或编译时间开销。

CLR 正在通过内存映射文件引用您的可执行镜像。仅当 CLR 使用 DLL 中的实际内容时,才会使用 RAM。这取决于您使用的方法的 IL 如何在图像中分布。有合理的可能性,因为 JIT 编译器从不引用 IL,图像数据也不会被分页到 RAM 中。换句话说,您将损失一些虚拟内存空间,但不会消耗相应数量的 RAM。

如果您的 DLL 是强命名的并且存储在不受信任的位置,那么由于文件较大,热启动时间会稍微长一些。

关于c# - 未使用的方法和属性对库或可执行文件的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120112/

相关文章:

c# - 从 <div class> 获取带有 <a href> child 的 innerText

c# - 临时将PDF转为图片,方便阅读二维码

.net - 'Microsoft.ACE.OLEDB.12.0' provider未在本地注册

c# - .net 4.0 上的 BlockingCollection 非常独特的异常(exception)

asp.net-mvc - 有没有完美的代码生成工具生成MVC Storefront?

c# - 将枚举传递给函数

c# - DotNetOpenId openIdRelyingParty 设置

c# - .NET 程序员的 JavaScript 编辑器

jvm - 创建一个简单的领域特定语言

c - 是否有命令行工具可以从 C 或 C++ 文件中提取 typedef、结构、枚举、变量、函数?