最近我在上问了一个问题,其中提到了使用c# ArrayList作为解决方案的可能性。有人评论说,使用数组列表是不好的。我想更多地了解这一点。我以前从来没有听过关于arraylist的这种说法。有人能告诉我使用数组列表可能出现的性能问题吗?
c#。.net-2
发布于 2010-07-25 03:45:13
ArrayList的主要问题是它使用了object --这意味着你必须对你封装的任何东西进行转换。它是泛型出现之前的残余,可能只是为了向后兼容。
ArrayList没有泛型列表所具有的类型安全性。性能问题在于需要将对象转换回原始对象(或者发生隐式装箱)。
当你使用一个值类型时,隐式装箱就会发生--它在被放入ArrayList时被装箱,而在被引用时被取消装箱。
问题不仅在于性能,还在于可读性和正确性。自从泛型出现以来,这个对象已经过时了,只有在.NET 1.0/1.1代码中才需要它。
发布于 2010-07-25 03:49:04
如果你存储一个值类型(整型,浮点型,双精度型,等等-或者任何结构),ArrayList将在每个存储上导致装箱,在每个元素访问时取消装箱。这可能会对性能造成重大影响。
此外,ArrayList完全缺乏类型安全性。因为所有的东西都是以“对象”的形式存储的,所以作为一个开发人员,你有额外的负担来保证它的安全。
此外,如果您想要存储对象的行为,则可以始终使用List<object>。与ArrayList相比,这没有缺点,而且它有一个很大的(IMO)优势:它从一开始就让您的意图(存储非类型化对象)变得清晰。
ArrayList实际上只存在于.NET 1.1代码中,而且应该只使用它。在.NET 2+中真的没有理由使用它。
发布于 2010-07-25 03:48:09
ArrayList不是泛型类型,因此它必须将您放置在其中的所有项存储为对象。这是糟糕的,原因有两个。首先,在将值类型放入ArrayList中时,您会强制编译器将值类型装箱为引用类型,这可能会带来很大的开销。其次,您现在必须强制转换从数组列表中取出的所有内容。这很糟糕,因为你现在需要确保你知道里面有什么对象。
List避免了这些问题,因为它是用正确的类型构造的。例如:
List<int> ints = new List<int>();
ints.Add(5); //no boxing
int num = ints[0]; // no castinghttps://stackoverflow.com/questions/3326599
复制相似问题