gpt4 book ai didi

revit-api - 使用 Revit API 编码 : tips to reduce memory use?

转载 作者:行者123 更新时间:2023-12-02 08:13:17 25 4
gpt4 key购买 nike

我有一个非常“笼统”的问题。我正在使用 Revit API(使用 python)进行开发,有时我会观察到 Revit session 在我的测试和试验期间变得更慢(Revit 保持打开的时间越长,它似乎发生的越多)。这还没有到真正有问题的地步,但无论如何它让我想到了..

因此,由于我没有编程背景,我很确定我的代码充满了真正“非正统”的东西,这些东西可能会好得多。

是否有一些我可以遵循的基本“提示和技巧”(我的意思是,与 Revit API 相关)来帮助加快代码执行速度?或者我应该说:帮助减少内存使用?

例如,我已经阅读了有关可用的“Dispose”方法的信息,特别是在使用 Transactions 时(例如此处:http://thebuildingcoder.typepad.com/blog/2012/09/disposal-of-revit-api-objects.html),但最终我并不清楚这是否真的非常重要,或者不是(此外,因为我使用的是 Python,并且不知道我在讨论是否使用“使用”时处于什么位置)?

我应该“处置”一切吗? ;)

除了'Dispose'方法,还有别的吗?

非常感谢,阿诺。

最佳答案

基础知识:

好吧,让我们在这里谈谈几个要点:

  • 您正在 IronPython 下运行脚本,IronPython 是 Python 在 C# 语言中的实现
  • C# 语言使用垃圾收集器来收集未使用的内存。
  • 垃圾收集器 (GC) 是一段定期执行的程序,用于收集未使用的元素。它使用一系列技术对目标内存区域进行分组和分类,以供以后收集。
  • 您的主程序被操作系统暂停以允许 GC 收集内存。这意味着如果 GC 在每个时间间隔需要更多时间来完成其工作,您的程序将会变慢并且您会遇到一些延迟。

问题:

现在进入这个问题的核心:python 本质上是一种面向对象的编程语言,IronPython 为所有内容创建对象(在概念上类似于 Revit 中的 Elements),从您的变量到类的方法再到函数和其他所有内容。这意味着所有这些对象都需要在不再使用时被回收。

当使用 python 作为程序的脚本语言时,通常有一个 python Engine 执行所有用户输入。

但是 Revit 没有命令提示符和关联的 python 引擎。因此,每次您在 Revit 中运行脚本时,都会创建一个新引擎来执行该程序并在最后死掉。

这会显着增加 GC 收集的未使用内存量。

解决方案:

我是 pyRevit 的创建者和维护者,此问题已在 pyRevit v4.2 中解决

解决方案是在创建 IronPython 引擎时设置 LightweightScopes = true,这将强制引擎创建更小的对象。这显着减少了 IronPython 使用的内存,并增加了用户体验 Revit 性能下降的时间。

关于revit-api - 使用 Revit API 编码 : tips to reduce memory use?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44155753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com