有关托管资源和非托管资源释放的有关问题

有关托管资源和非托管资源释放的问题
目前我们项目中采用了几个自己写的OCX控件,程序在运行中,遇到调用OCX控件时,就会出现内存飙升的问题,且程序执行结束后,内存没有明显的下降,而且再执行第二次是,还会持续叠加,最终会导致程序出现内存不足的情况而死掉。

     问题1.   OCX控件和DLL有什么区别?
           

          问题2.  OCX控件在程序调用时,是否属于非托管资源?

     问题3.   非托管资源在内存释放上需要如何处理?

先谢谢各位了。
------解决思路----------------------
OCX和DLL的区别,这个问法有问题,应该说原生的OCX和原生的DLL,以及ActiveX DLL的内存管理是一致的,都不受GC控制,都属于非托管的,都可能存在内存泄露。.NET类库属于托管代码,其中任何托管的内存的分配和使用都受GC控制。

非托管资源应该由调用者显式地清理,一般做法是写在Dispose方法中。但是这有一个前提,非托管库本身编写良好,没有资源泄露,并且提供了卸载和清理自身的调用,如果这个前提不具备,一切都是妄谈。
------解决思路----------------------
那你得看下OCX(非托管代码)声明的调用方式,在Import时候,声明一下
例如
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool CloseHandle(IntPtr handle);

问一下对方函数的CallingConvention
------解决思路----------------------
控件有问题吧,明显的内存泄露,要是有源码的话建议调试下