未使用的属性会导致额外的开销吗?

3
假设我们有一个生成的类,里面有很多冗余的访问器。它们只是访问器,不是字段。它们没有被调用过。它们只是存在那里,显得冗余和丑陋。
例如:
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 S.
可能是.NET中属性的性能开销的重复问题。 - Alain
@Ed 我可以删除它。问题是,它是自动生成的,所以很可能很快就会回来。而且,我没有耐心去阅读每一个并决定哪些是需要的,哪些不是。此外,这将破坏我的ContrivedExample。;-) - Buh Buh
那么...改变生成器逻辑怎么样?如果这需要太多的工作来证明,那么你就没事了,这些属性不会给你带来任何麻烦。 - Ed S.
1个回答

7

这不太可能有任何可测量的运行时开销。无论如何,由于这是一个性能问题 - 请测量你的使用情况并根据实际情况做出决策。

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

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

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


2
在这个问题上,对类的任何反思都会变得更糟。 - Alain
谢谢。我甚至没有考虑过反射。 - Buh Buh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接