Enumerable.Range与内存分配我有以下代码:IEnumerableelements=Enumerable.Range(1,Int32.MaxValue);Console.WriteLine("System.Int32的大小:{0}",sizeof(int));Console.Write("遍历{0}个元素...",elements.Count());Parallel.ForEach(元素,_=>{});Console.WriteLine("完成");打印出来:>SizeofSystem.Int32:4>Iteratingover2147483647elements...完成。但是,我不明白为什么这不会引发OutOfMemoryException。知道每个int值占用4个字节的空间,分配一个Int32.MaxValueint量应该占用~8GB查看我的应用程序,进程正在运行。~5.200KB。元素正在迭代成功,所以它必须分配到某个地方,对吧?LINQ是如何做到这一点的?IEnumerable不是数组。它本身不存储任何信息。实现它的类能够遍历一组值。这里的值并没有存储在数组中,而不是只是迭代并产生每次迭代的结果。像这样:publicIEnumerableGetRange(intstart,intnumber){for(inti=start;我明白了,没有数组,没有存储。它只记住迭代器中的当前位置,并可以执行适当的步骤来获取下一个.这段代码是由C#编译器动态生成的。以上就是C#学习教程的全部内容:Enumerable.Range和内存分配分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
