C#学习教程:C#编译器优化 – 未使用的方法分享


C#编译器优化 – 未使用的方法

C#编译器(在VS2008或VS2010中)在编译时是否删除未使用的方法?

我认为决定是否使用公共方法可能有问题,所以我猜它会编译所有的公共方法。

但是在类中从未使用的私有方法呢?

编辑:

是否存在关于编译器optmization的一组规则,这些规则在任何地方都有记录?

只需检查发布版本的reflection器。 编译器不会删除未使用的私有方法。

有一些方法可以使用没有编译器知识的方法,比如reflection。 所以编译器不会尝试猜测。 它只是将方法留在那里。

编译器删除的唯一私有方法是没有实现的部分方法 。

对于C#编译器优化,请查看此处 。

编译器不会从程序集中删除任何方法,公共或私有。 实际上,我可以通过reflection引起奇怪的问题,并阻止对这些方法的运行时调用。

有很多框架(比如XAML解析器),它使您能够在没有静态绑定的情况下调用私有方法(在XAML文件中考虑OnClick =“myFunction”)当引发OnClick事件时,此标记将调用可能的私有myFunction。 ..但是编译器在编译时没有关于这种行为的信息。

动态代码也遇到同样的问题,也就是IL生成。 并且您可以在完全信任下执行时从任何对象访问私有方法。

不,他们不会被删除。 它可能会给你警告,但不会自己做。

这种优化在JIT级别上有效实现,这很好,因为它适用于公共/私有/任何方法。 如果从不调用方法(忽略ngen等),它永远不会被JITed。 现在你可能会说这仍然浪费了元数据等空间,但正如其他人所指出的那样,私有并不是那么私密。

上述就是C#学习教程:C#编译器优化 – 未使用的方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1269832.html

(0)
上一篇 1天前
下一篇 1天前

精彩推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注