guohq 发表于 2016-1-14 21:53:58

应该会自动销毁的吧

雪山飞狐_lzh 发表于 2016-1-15 08:53:25

事务打开或新建的实体 是由事务自行销毁的

cairunbin 发表于 2016-1-15 23:12:45

本帖最后由 cairunbin 于 2016-1-16 11:22 编辑

雪山飞狐_lzh 发表于 2016-1-15 08:53 static/image/common/back.gif
事务打开或新建的实体 是由事务自行销毁的

谢飞狐提点。
我查了一下Kean的网站,大致应该是这样:
事物中打开或新创建并添加到数据库中的对象,由事物负责调用Dispose。
在事物中,创建但并未添加到数据库中的DBObject对象,应该由用户自行Dispose,否则,极可能导致AutoCAD崩溃。
即使是Autodesk.AutoCAD.Geometry名下的几何类,都有导致CAD崩溃的可能,如果没有被Dispose的话。
Kean的两篇有关文章的链接为:
http://through-the-interface.typepad.com/through_the_interface/2012/08/calling-dispose-on-autocad-objects.html
http://through-the-interface.typepad.com/through_the_interface/2008/06/cleaning-up-aft.html

最近,我写的带状图自动分幅程序,总是莫名崩溃,崩溃点大多在Curve.IntersectWith方法,一直找不到原因,还以为是坐标值太大,Tolerance设置不正确导致,现在看起来,可能是因为临时DBObject对象的Dispose方法没有被正确调用有关。

吐槽:
Autodesk公司不知道到底在想什么,到底是支持二次开发还是害怕二次开发?提供了二次开发接口,但帮助文档看起来就像是故意将很多重要细节隐藏,让开发人员费尽心思去猜。
现在,AutoCAD二次开发的帮助文档,就是官方文档+Kean网站+社区+程序员猜猜看,,,呵呵呵。。。

另:Dispose的调用有两个途径,一是Using(在此声明需要Dispose的对象){},二是在try catch finally的finally块中,显式调用各对象的Dispose方法。

再另:若对象未被正确Dispose,那么VS会有提醒,在output窗口中,会问你,是不是忘了正确调用Dispose方法。如果有这样的提醒,就应该检查代码是否完善了。
页: 1 [2]
查看完整版本: 关于ObjectARX托管封装类的问题