zoukankan      html  css  js  c++  java
  • C#中的垃圾回收机制与delegate

    在DeepStream的C#版本调试过程中,发现了一个问题,运行一段时间后,大概每次内存到16M(Debug模式)就会异常

    错误“System.NullReferenceException:未将对象引用设置到对象的实例“

    逐句排查C++端的DLL代码,没有发现所谓的引用空指针

    后来不知道怎么弄的,弹出来

    卧槽,难道是垃圾回收GC的锅?网上搜了一通上述异常,发现与我使用的匿名Delegate有关,估计那个匿名的Delegate被当成垃圾回收了。

    [DllImport("deepstream_for_csharp")]
    public static extern void subscribe(string eventName, SubscribeCallBack callback);

    public delegate void SubscribeCallBack(string data);

    public void eventPosCallBack(string data)
    {
    JObject jo = (JObject)JsonConvert.DeserializeObject(data);
    double x = jo["pos"][0].ToObject<double>();
    double y = jo["pos"][1].ToObject<double>();
    double z = jo["pos"][2].ToObject<double>();
    Debug.Log("x:" + x + " y:" + y+ " z:"+ z);
    }

    // 刚开始这样匿名用的,悲催的,一段时间后就被GC了

    subscribe("pos", new SubscribeCallBack(eventPosCallBack));

    //应该这样写,先定义一个类变量,这样就不会被GC了

    public static SubscribeCallBack posDelegate = null;

    posDelegate = new SubscribeCallBack(eventPosCallBack);

    subscribe("pos", posDelegate);

  • 相关阅读:
    SQL 存储过程入门(五)
    QT程序崩溃原因示例和分析
    全志(allwinner)编译过程问题与解决方法汇总
    rust Linux环境下开发环境安装 和 IDE工具 EMACS配置
    DMZ
    什么是浮动IP
    PLMN和PSTN
    人生 -- 有感于近期的一个事件
    职场四原则
    Fatal error compiling: java.lang.NoSuc hFieldError??
  • 原文地址:https://www.cnblogs.com/coolbear/p/8952109.html
Copyright © 2011-2022 走看看