第8页
第4排
尊敬的社区亚搏国际在线官网:
我需要计算2000米半径内从许多点到所有其他点的加权距离。对于这个任务,我将NeigborFinder与ListExploder和ExpressionEvaluator结合起来计算每个点的加权距离。
现在,ListExploder产生大量元素,导致内存问题,尽管我使用的是一台64位机,内存为65GB。有没有其他方法可以解决这个问题,例如没有李斯特?我想我需要ListExploder能够计算表达式中每个点的加权距离评估器…
谢谢你的帮助,
文森特
在…的帮助下@标记2安全亚搏在线我用了一个pythoncaller而不是listerexploder/expressionevaluator/aggregator来完成这个任务。我使用的代码:
导入fmeimport fmeobjectsimport math模板函数接口:使用此函数时,确保其名称设置为“要处理功能的类或函数”的值transformer参数def process feature 1(feature):“距离=功能”的列表。getattribute(“邻居距离”)“距离”的总和=0.0“每个”单元的数字=0“距离”的列表中的距离“距离:每个”单元的数字=1 f“dij”=(math.sqrt(2*浮点数(距离)+1)-1)距离之和=距离之和+功能之和。
这大大缩短了计算时间。
但为了减少计算时间,更需要一种插值方法@基莫我想应该是该走的路了。
很高兴你能成功。我很遗憾不得不推荐python,但结果却是正确的选择。我认为表达评估师(基于TCL)是慢点。但我把它传递给了我们的开发人员,希望它能帮助我们展示在哪里需要一些性能改进。
所以我可以考虑一些事情或尝试…
1.您的日志中是否会收到一条消息,内容如下:“ResourceManager:optimizing memory usage(资源管理器:优化内存使用率)”。请稍候…?如果是这样的话,那就是FME开始缓存数据的时候,这就是真正大的减速发生的时候。如果我们能减少内存使用,我们就不会收到这样的信息,那么时间也应该大大减少。如果你最终拥有8亿个功能,然后,即使每个特性只保存几个字节,也会累积起来。
注:65GB/8亿功能=每个功能85字节!
2.第二步。我不知道分类变压器对你有多大作用。如果是先对一个xxx排序,或者是按组参数排序,我可以很容易地相信,排序时间比您在随后的变压器中保存的时间长(除非您确实希望数据有序,在这种情况下,它们显然是必要的)。
三。将几何量角器直接放在PointOnAreaOverlayer之后,你只需要一个。
第四章。您可以在单个testfilter中组合一些测试程序(在pointOnAreaOverlayer和neighborfinder之间)。
5.测试人员8做什么?你能在邻居发现之前把它移走吗?或者如果它寻找的距离大于2000,你可以把它作为最大距离放进邻居探测器。
你能给我寄一份副本你的工作区,如果可能的话还有一个日志文件?如果我能看到使用的不同参数,那么就更容易确切地看到可能改进的地方。
如果任何一个过程花费的时间超过喝一杯咖啡的时间,中断进程并找到更好的方法!如果一个工作流程需要一天以上的时间,我会很不高兴。亚搏在线你的机器很快,所以一定有一些效率很低的步骤。也许可以查看一些光栅工具来进行加权距离计算。
我想说如果你想要一个每段距离的输出记录,然后,是的,您将需要一个单独的功能,因此必须分解列表。但是,说实话,如果您可以创建一个该大小的列表,爆炸不会引起任何问题。特别奇怪的是,ListExploder删除了列表本身,因此,后面的特性所使用的内存不应该超过列表所使用的内存。
我认为问题发生在你做的其他处理中。里面有小组变压器吗?如果是这样的话,它可能会在先前的特性仍有未公开列表的情况下堆积数据。你能把一个特征保持器变压器放在列表爆炸器后面吗?也许可以将工作区运行到那个点(或者之后运行一个变压器)。我只是想证明至少功能的数量本身并不是问题。有多少功能退出列表爆炸器,顺便说一句?
另一件事是,您在使用功能缓存吗?如果是这样,试着关掉它。如果您正在缓存列表和分解列表中的所有功能,多次,那就成问题了。如果您需要功能缓存,那么尝试在不需要缓存的部件周围放置书签,折叠书签。这将阻止在该点进行缓存(或至少将其限制为单个缓存)。
如果你可以发布一个工作区的屏幕截图-特别是我们只需要知道列表爆炸器后面的变压器-那么这将有助于诊断是否有问题,或者使用什么参数来避免这个问题。
?2019安全亚搏在线软件公司|法律