Enumerable.Range(1,10000000)是否消耗大量内存?

时间:2018-02-14 20:51:19

标签: c# linq

我知道Enumerable.Range(..)。ToArray()将消耗与范围大小一样大的内存,但我想确认没有任何ToArray或ToList转换的Enumerable.Range(..)类似于索引循环

例如:

我使用下面的代码来检查整数数组项是否按完全顺序排列:

int[] numSequence = { 1, 2, 3, 4, 5 };
//Check if they are in sequence or not
bool isInSequence = numSequence.SequenceEqual(Enumerable.Range(1, numSequence.Count()));

虽然我没有将Enumerable.Range转换为数组,但我担心的是内存消耗的使用。当我有一个非常大的数组时,它会占用大量内存吗?

我的猜测是它正确使用了C#yield,它与使用for循环等效。但我想在这里证实。

1 个答案:

答案 0 :(得分:5)

不,无论您进行了多少次迭代,该方法besides one or two small integers内都没有分配内存。所有循环都使用CPU功率,但根本没有内存。

从代码中可以看出,Enumerable.Range没有任何内容实现为数组。作为评论中的注释,Enumerable.SequenceEqual列举了第二个序列,因此也没有问题。