2023/07/20

更新大体积3DModel的一些心得

作者 Leon

众所周知,Smart3D是32位软件,只有最新的Modern Client是改为了64位,但现在还没成熟到可以替换经典界面。32位软件能利用的内存上限是4G,所以在定义工作空间时,我们经常会遇到,当加载的过滤器中的对象超过25W时,就会提示你内存不足。照这个思路,如果我们更新一个几十万对象的3D Model,理所当然也会爆内存。但是3D其实在更新3D Model的时候是另起了一个叫EFDataProcessor Module的进程,这个进程是独立于3D主进程的,更有意思的是,鹰图官方还出了一个工具,叫ConfigurationManager,写入一些注册表,老版本3D打上相应的补丁,便可以控制将这个3D Model对应的滤器里的对象,按照指定数量切分成一份一份的,分配给指定数量的EFDataProcessor Module进程。比如我们设置了单个进程最大处理对象的数量为10W,最多进程数设置为4个,然后我们去更新一个100W对象数量的3D Model,那么程序会是这样来处理,同时运行4个EFDataProcessor Module进程,每个进程处理最多10W对象,哪个进程处理完,就另起一个新进程处理下一组10W对象,依次类推。到最后,会有一个合并的处理过程,这个过程也是挺耗费时间的,所以这种方式,对象数量越大的3D Model,优势体现得会越明显。

有一些注意的地方,单个的EFDataController Module还是32位程序,所以最大处理数量不宜给得过大,这里数量给得越大,单个进程占用的内存就会越大。CPU和内存足够的情况下,最大进程数量可以多给点。

我不太确定从具体哪个补丁或大版本开始,3D默认已经开启了自动切分,开启多EFDataProcessor Module进程的设置,自动切分的单进程最大条目为XXX,最大允许进程数取决于CPU和内存资源。

但是,在相同的环境内,我做了个对比,自动切分和手动10W * 4,处理100W左右的3D Model,对比结果是,前者3小时10分钟,后者不到2小时,且后者占用的CPU和内存资源更少。

0 0 投票数
文章评分