2011-03-30 90 views
3

這適用於.NET。 我正在尋找編寫空間映射應用程序。一次存儲器中會有幾個多邊形(大約30-50個多邊形)。每個polgon都有LatLong點的集合。該集合的範圍可以是每個多邊形10到200個。但是,有很多計算將使用這些點來完成,這就是爲什麼(爲了性能)我想使LatLong成爲一個結構。不過,我很厭倦那些將會在記憶中的LatLong。任何有識之士將不勝感激。 回顧一下:我想知道如果我推薦讓LatLong成爲一個結構體,因爲我希望性能在計算上,或者因爲在內存中的latLong的數量而需要一個類。結構與類

+0

退房:http://stackoverflow.com/questions/521298/when-to-use-struct-in-c你可能會回答你自己的問題在那裏。 – Marc 2011-03-30 14:21:27

+2

像往常一樣,首先,你應該把它作爲一個結構*如果你想要的價值語義*。做出決定後(你是否想要價值或引用語義?),衡量。然後問自己:「這個表現夠好嗎?」 – 2011-03-30 14:23:20

+0

這是一個絕對常見問題。學習搜索或嘗試縮小問題的範圍,直至您希望獲得其他指導的問題的具體細節。 (PS。寫清楚的英語也會有很大幫助) – sehe 2011-03-30 14:41:18

回答

10

對此的回答將取決於您的資源優先級,類/結構中的內容以及您如何使用它。我建議你找出你的內存/性能資源是什麼樣的,然後對這兩個實現進行大量測試,看看它們如何適合這些資源參數。如果可能,請嘗試測試您期望執行的實際操作。

MSDN also offers some good guidance on when and when not to use structs.從文章:

不要定義的結構,除非該類型具有以下所有 特徵:

  • 它在邏輯上表示單個值,類似於原始類型 (整數,雙精度等等)。
  • 它的實例大小小於16個字節。
  • 它是不可變的。
  • 它不會經常被裝箱。
1

無論你應該這樣做還是完全取決於你的應用。我會嘗試兩種方式,看看哪一個更快。當我有這個問題時,就是這樣做的。

0

用一個有代表性的計算做兩個測試實現,一個帶一個結構,一個帶一個類,然後測量,我重複測量(!!!)的性能。根據我的經驗,對這種預期表現的任何偏見很可能在這種情況下變得完全錯誤。

+0

同意,但使用實際的實際計算會更好。您需要衡量系統的性能,而不是某些可能具有或可能不具有相同性能特徵的系統。決定什麼是代表性計算並不總是容易的。 – 2011-03-30 14:30:24

+0

我同意,使用真實系統會帶來最好的結果。另一方面,當真實系統具有> 50,000行代碼時,錯誤的設計決策將不會像系統僅有500行代碼那樣容易。 – 2011-03-30 14:38:18

1

在一般情況下,如果你將有一個大的集合,其中包含在其中的數據不會改變,一旦實例化的簡單對象的(你latLongs聽起來像他們基本上數據容器),那麼我會親自使用一個不可變的結構體。