据我所知,属性是在编译时生成的(否则无法通过relflection加载属性)。无论如何,在某些情况下,属性可能会在运行时导致性能问题吗?
答案 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();
}
}
当然,如果您确实反映了该属性,则可以获得性能影响。 但后来你的问题变成了,“运行任意代码会产生性能影响吗?”。