簡體   English   中英

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

[英]What's the fastest way to return a list of objects in C#?

我正在為3D建模程序編寫插件。 API的一項功能是,您可以攔截顯示管道並插入將要顯示的其他幾何圖形,而這些幾何圖形實際上不會出現在模型中(您可以看到它,但不能選擇/移動/刪除等)。 。

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

我還有一條附加命令,它將“ Ghost”幾何圖形轉儲到實際模型中。 我發現,如果幾何圖形確實在模型中,則顯示速度會大大提高。 所以我想知道是否有一種更快的方法來向程序提供對象列表? 一個簡單的一維數組會比HashSet <>快得多嗎?

返回對象集合的最快方法是返回(a)內部用於構建集合的實際物理類型,或者(b)可以以不復制數據的方式強制轉換為類型在記憶中。 一旦開始復制數據(例如, CopyToToArrayToList ,復制構造函數等),您就會浪費時間。

話雖如此,除非項目數量很大,否則這將是微觀優化,因此可能不值得這樣做。 在這種情況下,只需將最常用的集合類型返回給調用代碼即可。 如果您不滿意,請進行一些計時測試,而不要猜測。

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

但這是關於關鍵查找的

我認為,對於一個foreach操作來說,普通列表或泛型列表會更快,因為它不涉及索引項/開銷(尤其是esp插入等應該更快)....但這只是一種直覺。

通常,當使用3D圖形時,如果設法盡可能減少繪圖調用/狀態更改,則可獲得最佳性能。

在您的情況下,我會嘗試通過合並裝飾的幾何圖形或嘗試使用某種批處理功能(如果可用)來將繪圖調用數減至最少。

丟幀很可能不是因為使用哈希列表/字典而不是數組。 (除非某處有損壞/昂貴的哈希函數...)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM