Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 使用时的资源管理;使用「;在序列表达式中_F#_Sequence_Resource Management - Fatal编程技术网

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何时处理?我的资源会在内存中停留很长时间吗?简短的回答是不会。我添加了更多的细节。