数组非常快,但是您不能添加任何数组,另一方面,列表非常方便,您可以不必担心地添加新项,但是它们要慢得多,我首先使用列表添加项目,然后通过MyList.ToArray()将其转换为数组,然后处理数组中的数据。现在我在想,这真的是有效的速度吗?还是我只是在浪费更多的时间转换成数组?
发布于 2015-04-01 08:59:19
MSDN说ToArray是O(N),其中N是计数:https://msdn.microsoft.com/en-us/library/x303t819%28v=vs.110%29.aspx
元素是使用Array.Copy复制的,这是一个O(n)操作,其中n是计数。 这个方法是一个O(n)运算,其中n是计数。
因此,您基本上要处理列表两次:一次用于ToArray调用,另一次在您的下一个循环中实际处理列表。在大多数情况下,删除ToArray可能比执行转换更具有性能。
发布于 2015-04-01 09:05:15
按索引访问数组元素比按索引访问列表元素要快。原因可以在.NET框架的源代码中找到。每次对list元素的访问都会导致显式范围检查。即使在最明显的情况下(从0到list.Count的循环循环),当前的JIT也无法对其进行优化。
将列表转换为数组的代价是一次性的O(N) .这一代价不是微不足道的。您必须大量访问数组,才能摊销成本。
我不能告诉你临界点在哪里。这是必须衡量的。作为一个主观的猜测,我会说,重复10-100次的集合将使这是值得的。
TL;DR:如果你经常使用数组,那么这会有回报的。通常,这种技术要么有害,要么浪费开发人员的时间。
https://stackoverflow.com/questions/29386398
复制相似问题