使用C#属性时的性能问题?

时间:2017-06-22 08:21:36

标签: c#

据我所知,属性是在编译时生成的(否则无法通过relflection加载属性)。无论如何,在某些情况下,属性可能会在运行时导致性能问题吗?

2 个答案:

答案 0 :(得分:3)

  

无论如何,在某些情况下,属性可能会在运行时导致性能问题吗?

仅当您的程序在代码中过度寻找属性时才会这样做。

属性仅在某些内容正在寻找时才有用。如果你用[MyAwsomeAttribute]装饰你的课程而没有找到它,那么将没有性能差异

性能差异取决于您拥有的属性数量;如果它被发现;以及执行违规属性所花费的时间(假设它具有此功能,许多属性都是纯粹的元数据)。

良好的示例是WCF自定义行为属性及其详细且可能复杂的实现方法。

答案 1 :(得分:0)

(测试MickyD的答案)

即使这个具有非常邪恶属性的代码仍然没有 性能影响,因为该属性永远不会被构建。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(new Foo().ToString());
        Console.ReadLine();
    }
}

[ThrowExceptionException]
public class Foo
{
}

public class ThrowExceptionAttribute : Attribute
{
    public ThrowExceptionAttribute()
    {
        throw new NotImplementedException();
    }
}

当然,如果您确实反映了该属性,则可以获得性能影响。 但后来你的问题变成了,“运行任意代码会产生性能影响吗?”。