6

私はコードをもっている:

seq {for i in [1 .. 100000000] -> i} |> Seq.take 100000;;
Real: 00:00:00.000, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0
val it : seq<int> =
  Error: Exception of type 'System.OutOfMemoryException' was thrown.

このコードにより、メモリ不足が発生します。なんで?また、時間の計算後 (操作の完了後) に例外がスローされたのはなぜですか? AFAIK、個々のシーケンス要素は必要に応じてのみ計算されますか?

4

2 に答える 2

8
seq {for i in [1 .. 100000000] -> i} |> Seq.take 100000

list から要求したときに項目を生成するシーケンスを作成します[1 .. 100000000]。これには、リストがメモリ内にある必要があります。リストは 32 ビット メモリには大きすぎるため、OutOfMemoryException. 試してみてください

seq {for i in 1 .. 100000000 -> i} |> Seq.take 100000
于 2013-08-20T12:47:17.790 に答える