caoyin 发表于 2007-12-30 16:48:00

[求助]用vlax-release-object 清除vla对象

<p>为什么要用 vlax-release-object 清除 vla 对象,清除是为了节省内存还是其他原因。</p><p>假设变量 obj 是vla对象</p><p>(vlax-release-object obj) 的实际意义是什么</p><p>(setq obj nil) 可以从内存中清除吗?</p><p>请大家指点??</p>

cnks 发表于 2007-12-30 23:37:00

<p>不是清除,是释放对象,vlax-release-object是释放所占用的内存,你可以做个实验看看</p><p>(setq obj nil)不行</p>

caoyin 发表于 2007-12-31 09:19:00

谢谢指点,怎么做实验呢??

mccad 发表于 2008-1-1 22:34:00

<p>最后用一下GC函数也会好些。</p>

highflybir 发表于 2008-1-2 10:17:00

<p>其实vla的对象,是指针。每创建一个指针变量,就要开辟一片内存。</p><p><font size="2">就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。而局部变量在定义它的函数执行完后都会被系统自动删掉.(这还跟设置为nil值不一样)</font></p><p><font size="2">动态分配是指针的关键技术。它是用来在不必定义变量的情况下分配内存和让指针去指向它们。</font></p><p><font size="2">问题是:你动态地分配了一个内存空间,可它绝不会被自动删除。也就是说,这块内存空间会一直存在,直到你告诉电脑你已经使用完了。可结果是,你并没有告诉电脑你已不再需要这块内存空间了,所以它会继续占据着内存空间造成浪费,甚至你的程序运行完毕,其它程序运行时它还存在。当这样的问题积累到一定程度,最终将导致系统崩溃。所以这是很重要的,在你用完它以后,请释放它的空间.</font></p><p><a href="http://www.cnblogs.com/boylee/archive/2007/08/01/839036.html">http://www.cnblogs.com/boylee/archive/2007/08/01/839036.html</a></p><p><font size="2">所以你创建了这样一个对象最好要release它,最后收集内存垃圾。</font></p>

caoyin 发表于 2008-1-2 12:52:00

本帖最后由 作者 于 2008-1-2 12:56:00 编辑 <br /><br /> <p>多谢 <font face="Verdana"><font color="#000000">lidejun_55 MCCAD highflybir 指点,</font></font></p><p><font face="Verdana">由highflybir版主的结论可以得出,能用alisp、vlisp的方法,尽量不去用 vla方法,否则要多一个 release 过程。但我们在编程过程中可能会不小心忽略 release ,这样就会造成系统资源的浪费!!</font></p>

brainstorm 发表于 2017-7-31 16:15:10

;;;新建选择集-------------------------------------------
(setq new_ss
       (vla-add        (vla-get-selectionsets
                  (vla-get-activedocument (vlax-get-acad-object))
                )
                "test"
       )
)
;;;新建选择集后,一下步骤是否为必要的过程---------------
(vlax-for each new_ss
(vlax-release-object each)
)
(vlax-release-object new_ss)
;;;如果不释放的话,长期运行是不是会导致占用内存过多,机器速度下降?

brainstorm 发表于 2017-7-31 17:08:08

还有下面这句是否有必要

brainstorm 发表于 2017-7-31 17:09:20

还有下面这句是否有必要 (vlax-for each new_ss   (vlax-release-object each) ),还是直接(vlax-release-object new_ss)就可以了
页: [1]
查看完整版本: [求助]用vlax-release-object 清除vla对象