2010-06-01 66 views
1

我用FxCop來分析我寫的一些代碼。我曾經通過二傳手曝光了一個系列。我明白爲什麼這不好。當我不期望這樣做時,更改後備存儲是一個非常糟糕的主意。雖然這是我的問題。我從數據訪問對象中檢索業務對象列表。然後,我需要將該集合添加到另一個業務類,並使用setter方法執行此操作。我這樣做的原因是,做一個任務要比通過另一個addElement方法一次一次地將數十萬個對象插入集合要快。違反集合屬性應該只讀取性能的原則是否可行?

可以在某些情況下爲集合設置吸氣器嗎? 我雖然寧願有一個構造函數,需要一個集合? 我想也許我可以將對象傳遞給Dao,並讓Dao直接填充它? 還有其他更好的點子嗎?

+0

與標準集合中一樣,您可能會使用addRange方法,因此您不需要多次調用addelement。 – Arseny 2010-06-01 13:10:25

+0

@Arseny。但是這不會在引擎蓋下做更多或更少的相同事情,因此性能會差不多呢? – uriDium 2010-06-01 13:13:54

+0

(關於Arseny):如果更改底層集合,則只需重寫具有內部集合的類(即addrange方法),而不是調用addRange方法的類。 – Brian 2010-06-01 13:18:31

回答

0

我仍然會讓屬性爲只讀,並提供一個替代方法,它需要一個集合並執行可能的構造函數—。當然,這是一個屬性制定者本應該考慮的內容,但是這對於一個階級用戶來說很清楚,你不希望這個屬性從你的下面移出來,並且只能在特殊情況下進行分配。

+0

這就是爲什麼我建議構造函數的可能性作爲替代。它還傳達了我的期望,即應該有一個集合,並且不會破壞單元測試。但它是一個黑客?我能做些更聰明的事情嗎?還是這樣好嗎? – uriDium 2010-06-01 13:29:02

1

如果這些屬性不是您的公共API的一部分,請自行解決;否則不。但是,你真的確定這是一個性能瓶頸嗎?我敢打賭,你現在正在過早地進行優化。

+0

它接近100萬個元素。我沒有真正衡量性能的差異。將Dao中的所有對象放入列表中,將列表傳遞給列表,然後迭代列表並將其添加到另一個對象,感覺真的是錯誤的。這是工作的兩倍。 – uriDium 2010-06-01 13:27:29

+0

@uri你可能有什麼東西。但是,您可以將對列表的引用傳遞給另一個對象的構造函數,並顯示相同的列表。或者提供一個類似收藏的門面,它實際上暴露了一個到多個內部藏品集合...有很多不同的方法可以完成此操作,而無需全部複製它們。這取決於你的要求和你的設計。 – Will 2010-06-01 13:34:06