防止非托管函数指针垃圾回收
将代理转换为非托管代码的文档说明我自己负责阻止代理收集。 我想知道在非管理呼叫是否有效的情况下是否无法收集代表。 例如,如果我这样做
UnmanagedFunction(arg => somebody);
其中UnmanagedFunction不存储超出其调用的函数指针。 这应该是合法的,对吧? 在UnmanagedFunction正在执行时,CLR无法收集。
根据CLR Inside Out:托管和非托管代码之间的密钥 :
通常,您不必担心代表的生命周期。 每当您将委托传递给非托管代码时, CLR将确保在调用期间委托是活动的 。
好像你没事。
既然你明确提到了
UnmanagedFunction
不会将函数指针存储在它的调用之外。
文章的下一段
但是, 如果本机代码将指针的副本保留在调用范围之外并且打算稍后通过该指针回调 ,则可能需要使用
GCHandle
显式阻止垃圾收集器收集委托。
不适用。
上述就是C#学习教程:防止非托管函数指针垃圾回收分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1005282.html