为什么性能测试显示我的代码中列表比数组要快得多?

17 浏览
0 Comments

为什么性能测试显示我的代码中列表比数组要快得多?

这里列出了一些代码的执行时间,比较了数组和列表在不同循环中的性能。作者发现,列表比数组的执行速度要快很多。

在代码中,作者使用了NCrontab库来解析一个定时任务表达式,并使用了一个日期变量。然后,作者创建了一个包含1000000个元素的整数数组和一个初始容量为1000000的整数列表。

接下来,作者使用了Stopwatch类来计时。首先,作者使用for循环遍历列表,并在每次迭代中执行一个操作。然后,作者使用foreach循环遍历列表,并执行相同的操作。接着,作者使用for循环遍历数组,并执行相同的操作。最后,作者使用foreach循环遍历数组,并执行相同的操作。

作者将每个循环的执行时间打印出来,以便进行比较。从结果来看,列表的执行时间明显短于数组。

在引用中,有人解释说列表在内部实现上使用了数组,只不过它具有灵活性,并在容量超过时自动扩展。因为对于所有重要的操作,列表实际上是在执行数组操作,只是它提供了动态扩展的便利。

作者表示不理解这个解释,但是需要了解对于频繁和重要的操作来说哪种方式更好,以获得更高的FPS(帧率)。

作者通过比较数组和列表在不同循环中的性能发现,列表具有更快的执行速度,因此在需要高FPS的场景中,使用列表可能更好。

0
0 Comments

为什么性能测试显示使用我的代码,列表比数组快得多?

这些测试是不可比较的。

这里创建了一个拥有一百万个条目的数组。

int[] testArray = new int[1000000];

这里创建了一个空的列表,但是在后台为其分配了多达一百万个条目的内存(因此它不必在达到一百万之前调整其内部缓冲区的大小)。

List<int> testList = new List<int>(1000000);

因此,在这里testArray.Length将是1000000,而testList.Count将是0(因为您没有向其添加一百万个条目)。

从性能上来看,还有很多其他要考虑的因素,而不仅仅是循环遍历值。例如,如果添加或删除项导致需要调整数组大小,这对于数组来说可能非常昂贵。

这里的第二个问题是,您的基准测试方式也不是非常可靠。如果您想进行实际的基准测试,请查看https://benchmarkdotnet.org,它将正确地处理这些问题,并处理诸如预热运行、内存分配、在不同的框架版本上运行等等。

0