美文网首页
使托管对象保持活动状态

使托管对象保持活动状态

作者: Justin_901e | 来源:发表于2019-07-19 20:43 被阅读0次

GC.KeepAlive() 将确保对象保持在作用域内,直到采用 KeepAlive 方法。

HandleRef 允许封送处理程序在 P/Invoke 的持续时间内使对象保持活动状态。 方法签名中可以使用该类型,而不是 IntPtr。 SafeHandle 可有效地替换此类,应改为使用此类型。

GCHandle 允许固定托管对象和获取指向该类型的本机指针。 基本模式是:

GCHandle handle = GCHandle.Alloc(obj, GCHandleType.Pinned);

IntPtr ptr = handle.AddrOfPinnedObject();

handle.Free();

固定不是 GCHandle 的默认设置。 其他主要模式是通过本机代码将引用传递到托管对象并返回到托管代码(通常使用回调)。 模式如下:

GCHandle handle = GCHandle.Alloc(obj);

SomeNativeEnumerator(callbackDelegate, GCHandle.ToIntPtr(handle));

// In the callback

GCHandle handle = GCHandle.FromIntPtr(param);

object managedObject = handle.Target;

// After the last callback

handle.Free();

请务必注意需要显式释放 GCHandle 以避免内存泄漏。

相关文章

  • 使托管对象保持活动状态

    GC.KeepAlive()将确保对象保持在作用域内,直到采用 KeepAlive 方法。 HandleRef允许...

  • JPA实体的四种状态

    JPA中的实体对象拥有四种状态: 瞬时状态(transient) 托管状态(persistent) 游离状态(de...

  • CoreData学习笔记(二)

    托管对象模型基础 1、创建托管对象:根据实体(Item)来新建托管对象,并将其插入上下文——NSEntityDes...

  • 中医哲思05积精全神保养真气

    第四,积精全神,保养真气 积精:是指护养精气,使之充实,不致妄泄而耗伤。 全神:即通过养神使精神活动保持正常状态。...

  • 托管活动

    昨天我在乐迪托管参加了一个活动,我家离乐迪托管特别近,走不到100步就到了。 我觉得那个活动特别有意思,老师分蓝队...

  • 运动,使我保持最佳教练状态

    曾经听到过一种说法:2019年是过去10年中最艰难的一年,也将是未来10年中最好的一年。2019年是否会是...

  • 精进2017

    2017年,要自律,坚持锻炼使身体保持最佳状态,看书学习,认识陌生人,保持好奇心,保持谦卑。

  • Spring Data JPA 自动更新数据

    描述:实体对象属于托管状态下时,往这个对象里面的某个属性 set 新的值,这个新的值会被更新到数据表中去。 使用 ...

  • 保持愤怒

    无论安稳的生活状态使你多么沉溺其中,请保持愤怒。无论当下的工作进展有多么切合心意,请保持愤怒。无论社会关系的维持使...

  • Boolan 第十三周 设计模式(三)

    状态变化模式 典型模式 State Memento 1 state目的是应对对象状态变化,行为也要随之变化,保持对...

网友评论

      本文标题:使托管对象保持活动状态

      本文链接:https://www.haomeiwen.com/subject/oihelctx.html