【问题标题】:Do unused properties cause overhead?未使用的属性会导致开销吗?
【发布时间】:2012-05-18 05:40:11
【问题描述】:

假设我们有一个带有很多冗余访问器的生成类。它们只是访问器,它们不是字段。他们在任何地方都没有被调用。他们只是坐在那里多余和丑陋。

例如:

public class ContrivedExample
{
    public int ThisOneIsUsed { get; set; }

    public int ThisOneIsNeverCalled0 { get { /* Large amounts of logic go here, but is never called. */ } }
    public int ThisOneIsNeverCalled1 { get { /* Large amounts of logic go here, but is never called. */ } }
    public int ThisOneIsNeverCalled2 { get { /* Large amounts of logic go here, but is never called. */ } }
    //...
    public int ThisOneIsNeverCalled99 { get { /* Large amounts of logic go here, but is never called.*/ } }
}

ContrivedExample c = new ContrivedExample() { ThisOneIsUsed = 5; }

我能想到的唯一开销是它会使 .DLL 变大。我希望运行时惩罚为零。

这会导致任何其他开销吗?哪怕只是一点点开销?

【问题讨论】:

  • 简单删除不用的代码怎么样?为什么要保留它?
  • @Ed 我可以删除它。问题是,它是生成的,所以很可能很快就会回来。此外,我没有耐心阅读每一个并决定哪些需要,哪些不需要。此外,它会破坏我的 ContrivedExample。 ;-)
  • 嗯...然后更改生成器逻辑?如果要证明的工作量太大,那么您会没事的,这些属性不会给您带来任何麻烦。

标签: c# .net properties overhead


【解决方案1】:

不太可能有任何可测量的运行时开销。无论如何,因为这是性能问题 - 衡量您的使用情况,如有疑问,请根据您的情况做出决定。

未引用的方法不会被 JIT 编译,也不会导致直接的运行时开销。

该类的元数据将更大(以及您提到的程序集大小)。

如果在一些涉及大量反射的代码中使用该类,您可能会受到间接影响,而且如果代码在同一个类上反复反射,则它本身很可能是错误的。

【讨论】:

  • 请注意,对课堂进行的任何反思都会变得更糟。
  • 谢谢。我什至没有考虑过反思。
猜你喜欢
  • 2012-01-24
  • 2011-08-19
  • 2021-11-30
  • 1970-01-01
  • 2017-01-04
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多