什么是非托管对象?你能用CLR解释一下吗?我在互联网上了解到他们说非托管对象不能在CLR环境下运行。你能给我一个非托管对象的例子吗?
答案 0 :(得分:7)
任何不受CLR内存管理(即垃圾收集器)管理的内存都是非托管内存。
OS文件句柄是非托管内存的一个示例(在.NET和Windows下)。
妥善处置非托管 资源,建议你 实现公共Dispose或Close 执行必要的方法 对象的清理代码。该 IDisposable接口提供 处理资源类的方法 实现接口。因为 它是公开的,你的用户 应用程序可以调用Dispose 方法直接释放所用的内存 非托管资源。当你正确的时候 实现一个Dispose方法, Finalize方法成为一种保障 在那种情况下清理资源 不调用Dispose方法。
答案 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)