Tharwat 发表于 2022-7-6 07:46:21

 
很高兴你收到了。

Lee Mac 发表于 2022-7-6 07:49:09

 
不客气,保罗,如果您对我的代码示例还有任何疑问,请提问。

paulmcz 发表于 2022-7-6 07:52:41

嗯,我确实有个问题,李。在这里,我使用1+计数器来逐步通过ssget集,您使用1-计数器。有什么特别的原因吗?他们看起来都很好。

irneb 发表于 2022-7-6 07:56:09

只有一个原因:因为李的代码是如何使用选择集的。
 
他正努力做到尽可能优雅高效。注意,他的选择集处理不需要progn,它不使用单独的setq来获得计数器=0并每次检查长度。相反,他使用重复循环,只检查一次长度,同时将计数器设置为选择集上的长度。然后,他所需要做的就是在使用计数器之前减少计数器-从而从选择集中的最后一个项目步进到第一个项目。
 
到目前为止,这是我见过的使用选择集最有效的方法,除非您使用ActiveX选择集。

Lee Mac 发表于 2022-7-6 07:58:55

很好的解释,伊恩,谢谢你
 
这也可能对选择集处理的主题有所帮助:
http://www.cadtutor.net/forum/showthread.php?72186-循环While&p=493190&viewfull=1#post493190

paulmcz 发表于 2022-7-6 08:03:47

好东西,伙计们,谢谢。

irneb 发表于 2022-7-6 08:04:41

高兴很容易赞美你的编码
 
无论如何,我希望foreach可以直接用于SS。与通用lisp中的for循环相同,它可以用于所有序列(包括数组、字典、字符串、列表等)。这将使代码能够在多线程环境中使用,从而允许在不干扰顺序/序列的情况下运行每个迭代,从而不仅可以实现更优雅的代码,而且可以极大地提高性能。

paulmcz 发表于 2022-7-6 08:09:14

我不知道你在这里说什么Irne。你能举个例子解释一下吗?谢谢

irneb 发表于 2022-7-6 08:13:29

我的意思是我希望能够以这种方式使用选择集:
这样,代码可以按任何顺序运行,系统(lisp解释器)可以允许多核CPU同时运行多个迭代。E、 g.通过4核CPU同时执行第一、第二、第三和第四项与只运行一次迭代几乎需要相同的时间。因此,上述代码在4核上的运行速度可能要快3-4倍。
 
CL中的另一个不是AutoLisp的东西是“自动”闭包。这进一步有助于实现多线程。假设上面有如下内容:
注意这会破坏多线程?因为您现在使用的变量可以从其他线程中更改。而使用CL let语句,您可以将这些变量包含在foreach循环中,从而使它们独立于每次迭代。
 
就像现在的ALisp一样,即使可以添加这样的多线程,确保闭包的唯一方法就是限制自己只在foreach循环内使用函数编程。

paulmcz 发表于 2022-7-6 08:15:08

好的,那得过一会儿再说。现在,我必须确保append和类似函数不会给我带来像这个线程中那样的问题。谢谢
 
你如何衡量性能或速度?我首先在2000多条多段线的图形上使用命令“change”运行此例程。太慢了。
页: 1 [2]
查看完整版本: 协会62