次のコードをコンパイルしてみてください。コンパイラが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 OS名:Microsoft Windows 7 Ultimate OSバージョン:6.1.7601 Service Pack 1 Build 7601
5
よかった!コードをビジュアルスタジオに貼り付けたところ、32ビットプロセスが許可されていたすべての4Gbが消費されてクラッシュしました(Windows 8.1では2013 Ultimate)。
—
satnhak 2014
このコードを共有コードベース(メモ帳を使用)に追加し、同僚のマシンのクラッシュを監視します。
—
usr 14
Microsoft Connect、およびコンパイラーが同じ動作を示す場合はRoslynチームに報告するのは良いことのように思えます。
—
Trillian 2014
Eric Lippertがどこかで(どこかは思い出せませんが)ラムダを型推論でネストしすぎるとコンパイラーに厄介な問題が発生する可能性があると言っているのを聞いたと思います。どこで見たのかわからないので参考にできない。うまくいけば、男自身がこれを見てコメントするかもしれません...
—
クリス
よくやった、それを切り詰めて、あなたはこれに対する素晴らしい答えを持っているかもしれません:お気に入りのコンパイラをクラッシュさせてください
—
Nathan Cooper 14