Pup*_*ppy 5 .net c# clr delegates garbage-collection
将代理转换为非托管代码的文档说明我自己负责阻止代理收集.我想知道在非管理呼叫是否有效的情况下是否无法收集代表.例如,如果我这样做
UnmanagedFunction(arg => somebody);
Run Code Online (Sandbox Code Playgroud)
其中UnmanagedFunction不存储超出其调用的函数指针.这应该是合法的,对吧?在UnmanagedFunction正在执行时,CLR无法收集.
根据《CLR Inside Out:托管代码和非托管代码之间的封送处理》:
通常,您不必担心代表的生命周期。每当您将委托传递给非托管代码时,CLR 都会确保该委托在调用期间处于活动状态。
看来你没事。
既然你明确提到
UnmanagedFunction不存储超出其调用范围的函数指针。
文章的下一段
但是,如果本机代码在调用范围之外保留指针的副本,并打算稍后通过该指针回调,则可能需要使用
GCHandle显式阻止垃圾收集器收集委托。
不适用。
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |