我正在为3D建模程序编写插件。 API有一个功能,您可以截取显示管道并插入其他几何体,这些几何体将在实际存在于模型中时显示(您可以看到它,但您无法选择/移动/删除等等。)
API的这个功能的一部分是在每个屏幕刷新时调用的方法,用于告诉程序要显示的额外几何体。现在我有一个使用foreach语句迭代的 HashSet 。 OnBrep 是API的通用几何类。
我有一个额外的命令会将“Ghost”几何体转储到实际模型中。我发现,如果几何体实际上在模型中,则显示速度会提高很多。所以我想知道是否有更快的方法来提供程序的对象列表?简单的一维数组是否明显快于HashSet<>?
答案 0 :(得分:1)
返回对象集合的最快方法是返回(a)内部用于构建集合的实际物理类型,或(b)可以以数据方式强制转换为的类型不会复制到内存中。只要您开始复制数据(例如CopyTo
,ToArray
,ToList
,复制构造函数等),您就会浪费时间。
话虽如此,除非项目数量很大,否则这将是微观优化,因此可能不值得做。在这种情况下,只需将最常用的集合类型返回给调用代码。如果你不熟悉,做一些时间测试而不是猜测。
答案 1 :(得分:0)
This here是关于hashset / dictionary / generic list
性能的广泛研究但这是关键的查找
Personnaly我认为普通或通用列表对于foreach操作更快,因为它不涉及索引项目/开销(esp插入等应该更快)....但这只是一种直觉。
答案 2 :(得分:0)
通常在使用3D图形时,如果您设法尽可能减少绘制调用/状态更改,则会获得最佳性能。
在您的情况下,我会尝试通过合并您装饰的几何图形或尝试使用某种批处理功能(如果可用)来将绘制调用减少到最小。
帧丢弃很可能不是因为使用散列列表/字典而是使用数组。 (除非某处有破损/昂贵的散列函数......)。