2009-08-31 101 views
2

我正在爲3D建模程序編寫一個插件。 API的一個特點是可以截取顯示管道並插入額外的幾何圖形,這些幾何圖形不會真正在模型中顯示(您可以看到它,但不能選擇/移動/刪除等等)。 。返回C#中對象列表的最快方式是什麼?

API的這個功能的一部分是在每次屏幕刷新時調用的方法,用於告訴程序顯示哪些額外的幾何圖形。現在我有一個HashSet用foreach語句迭代。 OnBrep是API的通用幾何類。

我有一個額外的命令,將「鬼」幾何轉儲到實際模型中。我發現,如果幾何實際上在模型中,顯示速度會提高很多。所以我想知道是否有更快捷的方式將對象列表提供給程序?一個簡單的一維數組會比一個HashSet明顯更快嗎?

+1

您是否有基於配置文件的證據表明迭代哈希集合是您程序中最慢的事情?如果沒有,先找到最慢的東西,然後優化它。 – 2009-08-31 22:43:33

回答

1

返回對象集合的最快方法是返回(a)內部用於構建集合的實際物理類型,或者(b)可以以這種方式投射的類型數據不會被複制到內存中。只要您開始複製數據(例如CopyToToArrayToList,複製構造函數等),您就失去了時間。儘管如此,除非物品的數量很大,否則這將是一種微型優化,因此可能不值得這樣做。在這種情況下,只需將最常用的集合類型返回給調用代碼即可。如果你不習慣,那麼做一些時間測試而不是猜測。

+0

是的,這最終成爲問題。這是一個Nurbs建模程序,但我今天發現它使用網格來進行實際顯示。所以我正在修改我的代碼來保存一組網格,而不是實際的Nurbs曲面。 但它聽起來像收集的類型不應該在速度上有很大的區別? – 2009-08-31 20:59:05

+0

理論上,沒有。但是,實際上,數據的大小可能很重要。不要拿我的或其他人的話 - 分析你的代碼,看看時差是否顯着。 – 2009-09-01 07:20:02

0

This here是HashSet的/字典的性能/廣泛研究泛型列表

但它是關於鍵查找

Personnaly我認爲,一個正常的或通用的清單是因爲它涉及了一個foreach操作更快沒有索引項目/開銷(尤其是插入等應該更快)....但這只是一種直覺。

0

通常,在使用3D圖形時,如果儘可能減少繪製調用/狀態更改,您將獲得最佳性能。

在你的情況下,我會嘗試通過合併你的裝飾幾何圖形或嘗試使用某種形式的批處理功能(如果可用)來將繪製調用降至最低。

這很可能是因爲使用散列表/字典而不是陣列而導致的丟幀。 (除非在某個地方存在破碎/昂貴的哈希函數...)。

相關問題