明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2964|回复: 12

[基础] 关于ObjectARX托管封装类的问题

[复制链接]
发表于 2011-3-25 15:20:44 | 显示全部楼层 |阅读模式
“ObjectARX 托管封装类的内存管理与销毁样式中介绍:
因为ObjectARX托管封装类使用的内在资源是非托管类,你必须调用托管封装类的Dispose
这样做会释放所有继承的基类所拥有的资源。不要指望.NET的垃圾收集器会清理非托管资源所使用的内存。”

介绍中的意思是不是说:
实例后的CAD类,需要在使用完成后,Dispose释放掉。
1、必须每个都释放吗?
2、如果自定义一个方法,如:
public void CreateLine(){...}
里面没有使用Dispose,
那么,方法执行完成后,相关资源不能释放吗?






发表于 2011-3-25 15:52:48 | 显示全部楼层
不妨自己试试?生成一千个,一万个,百万个Line,看看会怎样?
 楼主| 发表于 2011-3-25 16:35:48 | 显示全部楼层
sieben 发表于 2011-3-25 15:52
不妨自己试试?生成一千个,一万个,百万个Line,看看会怎样?

主要看什么呢?内存占用吗?
发表于 2011-3-25 18:26:37 | 显示全部楼层
呵呵,你关心什么就看什么呀!你关心内存就看内存,你关心是否会崩溃就看是否崩溃,你关心电脑会不会死机就看是否死机。
发表于 2011-3-27 13:57:08 | 显示全部楼层
public void CreateLine(){...}方法内的对象的生命期就是该方法,如果该方法执行完毕,其中的资源会隐式执行FInalize方法,被GC处理掉,如果我没有记错的话
发表于 2011-3-27 16:05:16 | 显示全部楼层
本帖最后由 sieben 于 2011-3-27 16:16 编辑

楼上所说只是托管资源,关键在于是否涉及非托管资源,非托管资源才需要自己析放!
托管资源一般不需要自己去析放,而我看牛人的介绍说,即使调用了GC,也只是告诉垃圾回收站说有东西要回收了,回收站知道了有东西要回收,但不一定立刻去处理,基本还是按照自己的运作机制进行垃圾回收(我自己的经历,与这个说法是相符的)。
一般情况下,现在的内存够大,我们的运算量也应该不会太大,应该不需要去管这些,但若涉及非托管资源,则需要注意析放。
 楼主| 发表于 2011-3-28 09:42:36 | 显示全部楼层
cad开发中使用到的“涉及非托管的资源”,这个怎么才能知道?哪些是非托管的?
发表于 2011-3-28 11:03:39 | 显示全部楼层
呵呵!这个我也搞不定。
发表于 2011-3-28 21:54:25 | 显示全部楼层
应该是Autodesk.AutoCAD.Runtime.DisposableWrapper的子类吧
所有的实体类,Ge下的几何类。。。
发表于 2016-1-14 16:06:04 | 显示全部楼层
确实是个问题。但是即使Autodesk官方样例,也没有调用Dispose()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 08:31 , Processed in 0.152261 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表