我知道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循环等效。但我想在这里证实。
答案 0 :(得分:5)
不,无论您进行了多少次迭代,该方法besides one or two small integers内都没有分配内存。所有循环都使用CPU功率,但根本没有内存。
从代码中可以看出,Enumerable.Range
没有任何内容实现为数组。作为评论中的注释,Enumerable.SequenceEqual
列举了第二个序列,因此也没有问题。