問題のあるコードをこの関数 (ASP.NET のメンバーシップ クラスを使用) に分離しました。
let dbctx = DBSchema.GetDataContext()
let rec h1 (is2_ : int) (ie2_ : int) : unit =
match is2_ >= ie2_ with
| true ->
let st2 = query {
for row in dbctx.Tbl_Students do
where (row.Id = is2_)
head}
let l2 =
Membership.FindUsersByEmail (st2.Email_address)
|> Seq.cast<_>
|> Seq.length
match l2 >= 1 with
| true ->
()
| false ->
Membership.CreateUser (st2.Email_address, password, st2.Email_address)
|> ignore
h1 (is2_ - 1) ie2_
| false ->
()
System.OutOfMemoryException
の正確な5626
繰り返しの後に取得していますh1
。しかし、私のシステムのメモリ消費量は20 percent
. (私は非常に強力な 16 GB のマシンを持っています。)
上記の関数がスタックをオーバーフローするのはなぜですか? tail 再帰的に書かれていませんか?
よろしくお願いします。