我需要暂时在列表或数组中存储多个值。这些值是多种类型,如string,int,datetime等。
我有两个选择:
选项1:
声明一个对象类型的数组,如下所示:
object[] values;
选项2:
为接口声明数组并为每个要保留的类型实现自己的类。
interface IType
{
}
IType[] values;
class StringValue : IType
{
public string StringValue { get; set; } // not declared in interface!
}
class IntValue : IType
{
public int IntValue { get; set; } // not declared in interface!
}
问题:
每种实施方案的性能优势和/或影响是什么?据我所知(或quessing),boxinq在使用object[]
时会对性能产生影响。
选项二怎么样?至少使用StringValue
或IntValue
属性需要更多代码,必须确定第一个类型,IType
必须转换为StringValue或IntValue等...
使用object[]
对性能有如此大的影响,我真的应该考虑类似选项2的内容吗?
答案 0 :(得分:1)
你建议的类IntValue
基本上是一个整数...它将它封装在一个对象中,它可以参与一个对象[]。我希望在这种情况下没有性能改进,并且根据你的实现,它可能比编译器实现的装箱更糟糕。
话虽如此,我同意评论者的观点,即您的努力可能会更好地集中精力改进代码的其他方面。很少有情况下拳击开销将是最重要的关注领域。
我确实遇到了一个场景(使用许多可能是int,float或double的数字),其中拳击对用户体验很重要。我解决了using expression trees。
答案 1 :(得分:0)
我认为没有太多的性能影响。如果使用object [] _objects,用于查找对象类型的反射可能会使其慢一点。 .GetType()函数。