- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常“笼统”的问题。我正在使用 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'方法,还有别的吗?
非常感谢,阿诺。
最佳答案
基础知识:
好吧,让我们在这里谈谈几个要点:
问题:
现在进入这个问题的核心: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/
我想用 revit api 控制加载族和创建类型的事件。有人可以给我一个方向吗?我不太了解我阅读的文档。 最佳答案 首先,您需要通过在 IExternalApplication OnStartup 方
我使用过 RevitPythonShell 和 Dynamo,但我想使用我现有的 Python IDE (Eclipse),我在其中配置了日志记录、调试、GitHub 集成等。 我对事务和整个 API
使用 Revit Python Shell,我尝试提示用户选择一个房间。我一直在阅读并实现此处描述的方法 Revit Python Pick Object / Select Object 。它工作正常
假设我想创建一个基于云的服务,该服务可以连接到 Revit Server 并获取模型数据、对其进行处理,然后在基于 Web 的界面中向用户返回一些有用的信息。然后用户修改模型并将更改提交到服务器。我的
我打开文件 A,其中链接了 x 个文件 B。文件 B 还链接了 x 个文件 C。我想知道文件 C 的位置名称。 我使用 dynamo for revit 收集文件 A 中的 RevitLinkInst
在 Revit API 中,我知道我可以获得当前正在运行的 Revit 实例的版本(ControlledApplication.VersionBuild,ControlledApplication.V
我正在尝试使用 Revit API 激活 View 。我想要做的正是提示用户选择一些墙,但是当用户被问到时,他无法切换 View 以选择更多墙(此时一切都变灰了)。 所以我想激活的 View (我的意
长期以来,我一直在使用 Autodesk Forge 的 Model Derivative API(成功)将 Revit 文件导出到 IFC。 但是,我注意到即使使用法语版软件(即 Revit FRA
我有一个非常“笼统”的问题。我正在使用 Revit API(使用 python)进行开发,有时我会观察到 Revit session 在我的测试和试验期间变得更慢(Revit 保持打开的时间越长,它似
我尝试使用 python 编辑我的 Revit.ini 文件,但是我仍然收到以下错误。今天大部分时间我都在用头撞墙。在此感谢任何帮助。 我一直在 python 2.7 上使用 ConfigParser
我需要为许多元素(>100'000 个项目)找到大纲。目标元素来自 FilteredElementCollector。像往常一样,我正在寻找最快的方法。 现在我尝试遍历所有元素以获取其 Bouding
有一个元素的参数有 5 个选择(组合框的样式)。我知道如何获取当前选定的选项,但是有没有办法检索其他 4 个选项? 最佳答案 它们存储在 SimilarObjectTypes作为 ElementSet
我想重写我的 Revit 插件之一,以便它通过 MVVM 使用 WPF,因为与 Windows 窗体相比,我更喜欢 WPF 的外观和功能。 我已将 Jeremy Tammik 的 Revit 模板向导
我看到一个已经运行多年的基准有一些奇怪的行为。该基准适用于 Autodesk Revit,它可以使用日志文件来自动执行任务和记录时间。基准测试将读取一系列模块化日志文件的 XML 文件,这些文件可以根
我有这段代码,但我不知道如何显示我选择的墙的位置、高度和长度: using System; using System.Collections.Generic; using System.Linq; u
是否可以在不运行 Revit 的情况下创建与 Revit 数据库模型交互的我自己的 Revit API 代码的单元测试。 如果是这样,如何实现。 最佳答案 我参与了其中提到的一些话题。我什至参与过一个
我对 C# 和编码还很陌生。如果可能的话,我正在寻找一些帮助来弄清楚如何修复这段代码以使其正常工作。 他们单独工作。我可以在功能区上创建一个新按钮并执行标准的 hello world。我还有一个宏,可
我正在尝试拦截 Revit 并阻止窗口打开。具体来说,我试图将基调应用于一个对象,然后让用户创建一个基调标签,但是我这样做的任何方式都让他们放置基调,但随后立即给他们对话框来选择一个基调,但我不' 希
我想在查看器中放置一些 Three.js 对象,并在 Revit 模型中获得该对象的估计坐标。如何将这些坐标转换为查看器坐标以放置对象? 最佳答案 由于 Forge 查看器默认会对加载的模型应用全局偏
在执行 IExternalCommand 时,我可以通过 ExternalCommandData 轻松获取应用程序和文档 UIApplication uiApp = commandDa
我是一名优秀的程序员,十分优秀!