OCX和DLL的区别,这个问法有问题,应该说原生的OCX和原生的DLL,以及ActiveX DLL的内存管理是一致的,都不受GC控制,都属于非托管的,都可能存在内存泄露。.NET类库属于托管代码,其中任何托管的内存的分配和使用都受GC控制。非托管资源应该由调用者显式地清理,一般做法是写在Dispose方法中。但是这有一个前提,非托管库本身编写良好,没有资源泄露,并且提供了卸载和清理自身的调用,如果这个前提不具备,一切都是妄谈。

解决方案 »

  1.   

    我们的OCX 是封装的硬件设备的调用,在过程中,串口是一致打开的,而且里面可能有多个线程,调用结束的时候,也没有关闭串口和关闭线程,是不是问题就在这里。
      

  2.   

    那你得看下OCX(非托管代码)声明的调用方式,在Import时候,声明一下
    例如
    [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool CloseHandle(IntPtr handle);问一下对方函数的CallingConvention