2

我正在为 3D 建模程序编写插件。API 有一个功能,您可以在其中截取显示管道并插入其他几何图形,这些几何图形将在实际不在模型中显示的情况下显示(您可以看到它,但您不能选择/移动/删除等) .

API 的这个特性的一部分是在每次屏幕刷新时调用的方法,用于告诉程序要显示哪些额外的几何图形。现在我有一个用 foreach 语句迭代的HashSet 。OnBrep是 API 的通用几何类。

我有一个附加命令,可以将“Ghost”几何图形转储到实际模型中。我发现,如果几何实际上在模型中,则显示速度会加快很多。所以我想知道是否有更快的方法向程序提供对象列表?一个简单的一维数组会比 HashSet<> 快得多吗?

4

3 回答 3

1

返回对象集合的最快方法是返回 (a) 在内部用于构建集合的实际物理类型,或 (b) 可以以不复制数据的方式强制转换为的类型在记忆中。一旦您开始复制数据(例如,、、、CopyTo复制构造函数等),您就浪费了时间ToArrayToList

话虽如此,除非项目数量很大,否则这将是一个微优化,因此可能不值得做。在这种情况下,只需将最有用的集合类型返回给调用代码。如果你不确定,做一些时间测试而不是猜测。

于 2009-08-31T19:07:55.573 回答
0

是对哈希集/字典/通用列表性能的广泛研究

但它是关于关键查找

我个人认为对于 foreach 操作来说,普通或通用列表更快,因为它不涉及索引项/开销(尤其是插入等应该更快)......但这只是一种直觉。

于 2009-08-31T18:48:10.400 回答
0

通常在使用 3D 图形时,如果您设法尽可能减少绘制调用/状态更改,您将获得最佳性能。

在您的情况下,我会尝试通过合并您的装饰几何体或尝试使用某种批处理功能(如果可用)来将绘制调用减少到最低限度。

丢帧很可能不是因为使用哈希列表/字典而不是数组。(除非某处有损坏/昂贵的散列函数......)。

于 2009-08-31T19:20:49.900 回答