F# 使用时的资源管理;使用「;在序列表达式中
我有一个简单的序列表达式,它利用了我想在完成后清理的资源:F# 使用时的资源管理;使用「;在序列表达式中,f#,sequence,resource-management,F#,Sequence,Resource Management,我有一个简单的序列表达式,它利用了我想在完成后清理的资源: 类型MyObject()= 各位议员,我谨此陈辞= 序号{ use resource=ResourcePool.Get() 设c=resource.ValueCount 如果c>0,则 对于0..c-1中的i yield resource.GetValue i } 如果我然后使用序列来迭代,比如说,遍历项目的一半,那么资源将在什么时候被释放 例如: /。。。 设foo=MyObject 让item=foo.Items |>Seq.fi
类型MyObject()=
各位议员,我谨此陈辞=
序号{
use resource=ResourcePool.Get()
设c=resource.ValueCount
如果c>0,则
对于0..c-1中的i
yield resource.GetValue i
}
如果我然后使用序列来迭代,比如说,遍历项目的一半,那么资源将在什么时候被释放
例如:
/。。。
设foo=MyObject
让item=foo.Items |>Seq.find(乐趣i->i.Name=“Name”)
// ...
Seq.find完成后,
资源
是否会被处置?或者我需要重新考虑我的资源管理策略吗?它将在处置IEnumerator
时被处置,无论枚举了多少项。对于Seq
模块中的函数,当函数退出时会发生这种情况(例如)GetEnumerator
很少在用户代码中直接调用,但是当它被调用时,应该使用use
而不是let
来完成,我想这就是我害怕的。。。IEnumerator何时处理?我的资源会在内存中停留很长时间吗?简短的回答是不会。我添加了更多的细节。