在C#中返回对象列表的最快方法是什么?

时间:2009-08-31 18:43:13

标签: c# performance collections hashset

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

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

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

3 个答案:

答案 0 :(得分:1)

返回对象集合的最快方法是返回(a)内部用于构建集合的实际物理类型,或(b)可以以数据方式强制转换为的类型不会复制到内存中。只要您开始复制数据(例如CopyToToArrayToList,复制构造函数等),您就会浪费时间。

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

答案 1 :(得分:0)

This here是关于hashset / dictionary / generic list

性能的广泛研究

但这是关键的查找

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

答案 2 :(得分:0)

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

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

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

相关问题