asd106 发表于 2011-3-25 15:20:44

关于ObjectARX托管封装类的问题

“ObjectARX 托管封装类的内存管理与销毁样式中介绍:
因为ObjectARX托管封装类使用的内在资源是非托管类,你必须调用托管封装类的Dispose。
这样做会释放所有继承的基类所拥有的资源。不要指望.NET的垃圾收集器会清理非托管资源所使用的内存。”

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






sieben 发表于 2011-3-25 15:52:48

不妨自己试试?生成一千个,一万个,百万个Line,看看会怎样?

asd106 发表于 2011-3-25 16:35:48

sieben 发表于 2011-3-25 15:52 static/image/common/back.gif
不妨自己试试?生成一千个,一万个,百万个Line,看看会怎样?

主要看什么呢?内存占用吗?

sieben 发表于 2011-3-25 18:26:37

呵呵,你关心什么就看什么呀!你关心内存就看内存,你关心是否会崩溃就看是否崩溃,你关心电脑会不会死机就看是否死机。

cdinten 发表于 2011-3-27 13:57:08

public void CreateLine(){...}方法内的对象的生命期就是该方法,如果该方法执行完毕,其中的资源会隐式执行FInalize方法,被GC处理掉,如果我没有记错的话

sieben 发表于 2011-3-27 16:05:16

本帖最后由 sieben 于 2011-3-27 16:16 编辑

楼上所说只是托管资源,关键在于是否涉及非托管资源,非托管资源才需要自己析放!
托管资源一般不需要自己去析放,而我看牛人的介绍说,即使调用了GC,也只是告诉垃圾回收站说有东西要回收了,回收站知道了有东西要回收,但不一定立刻去处理,基本还是按照自己的运作机制进行垃圾回收(我自己的经历,与这个说法是相符的)。
一般情况下,现在的内存够大,我们的运算量也应该不会太大,应该不需要去管这些,但若涉及非托管资源,则需要注意析放。

asd106 发表于 2011-3-28 09:42:36

cad开发中使用到的“涉及非托管的资源”,这个怎么才能知道?哪些是非托管的?

sieben 发表于 2011-3-28 11:03:39

呵呵!这个我也搞不定。

雪山飞狐_lzh 发表于 2011-3-28 21:54:25

应该是Autodesk.AutoCAD.Runtime.DisposableWrapper的子类吧
所有的实体类,Ge下的几何类。。。

cairunbin 发表于 2016-1-14 16:06:04

确实是个问题。但是即使Autodesk官方样例,也没有调用Dispose()
页: [1] 2
查看完整版本: 关于ObjectARX托管封装类的问题