什么是非托管对象?

时间:2010-10-31 06:03:05

标签: c#

什么是非托管对象?你能用CLR解释一下吗?我在互联网上了解到他们说非托管对象不能在CLR环境下运行。你能给我一个非托管对象的例子吗?

4 个答案:

答案 0 :(得分:7)

任何不受CLR内存管理(即垃圾收集器)管理的内存都是非托管内存。

OS文件句柄是非托管内存的一个示例(在.NET和Windows下)。

  

妥善处置非托管   资源,建议你   实现公共Dispose或Close   执行必要的方法   对象的清理代码。该   IDisposable接口提供   处理资源类的方法   实现接口。因为   它是公开的,你的用户   应用程序可以调用Dispose   方法直接释放所用的内存   非托管资源。当你正确的时候   实现一个Dispose方法,   Finalize方法成为一种保障   在那种情况下清理资源   不调用Dispose方法。

参考:Cleaning Up Unmanaged Resources

答案 1 :(得分:5)

简单来说,非托管对象是不受.Net框架管理的对象。

最好的例子是数据库连接或文件操作由操作系统最终处理,需要显式释放(File.Close()或Connection close),垃圾收集器不会自动处理。

答案 2 :(得分:1)

I learned on the internet that they say unmanaged objects don't run under the CLR environment.

这是不对的,CLR几乎能够在C中完成所有可能。在C#中,你有一个名为unsafe的keywoard,它允许你访问偶数指针和指针偏移。我有一个项目,我使用游戏引擎重做Interop,C包装器很小,因为我可以处理CLR / C#中的所有内存对象。

通过运行,他们可能希望明确表明虚拟机不处理未管理的对象:您必须进行清理或创建执行清理的包装类为了你。

答案 3 :(得分:1)

每天为您的应用程序或网站使用的VC ++ 6.0样本或许多activeX和COM对象都是不受管理的,例如Excel VBA是不受管理的,而且有太多其他样本。