尝试编译以下代码,您会发现编译器需要> 3 GB的RAM(计算机上的所有可用内存)和很长的时间进行编译(实际上,我在10分钟后得到IO异常)。
using System;
using System.Linq;
public class Test
{
public static void Main()
{
Enumerable.Range(0, 1).Sum(a =>
Enumerable.Range(0, 1).Sum(b =>
Enumerable.Range(0, 1).Sum(c =>
Enumerable.Range(0, 1).Sum(d =>
Enumerable.Range(0, 1).Sum(e =>
Enumerable.Range(0, 1).Sum(f =>
Enumerable.Range(0, 1).Count(g => true)))))));
}
}
有人可以解释这种奇怪的行为吗?
CS版本:Microsoft(R)Visual C#编译器版本4.0.30319.17929 操作系统名称:Microsoft Windows 7 Ultimate 操作系统版本:6.1.7601 Service Pack 1 Build 7601
5
好决定!我只是将代码粘贴到Visual Studio中,它消耗了允许32位进程访问的所有4Gb内存,然后崩溃了(Windows 8.1上的2013 Ultimate)。
—
satnhak 2014年
将此代码添加到共享代码库(使用记事本),并观察您的同事计算机崩溃。
—
usr 2014年
如果Microsoft Connect和Roslyn小组的编译器表现出相同的行为,则向他们报告是一件好事。
—
Trillian 2014年
我相信我已经听过Eric Lippert在某个地方(尽管我不记得在哪里)说过,将lambda嵌套太多并带有类型推断会导致编译器有些麻烦。我无法想像我在哪里看过,因此无法引用。希望这个人自己可以看到这个并发表评论……
—
Chris
做得好,将其缩减,您可能会对此有一个不错的答案:崩溃您最喜欢的编译器
—
Nathan Cooper 2014年