2014-03-29 24 views
1

幾天前,我開始接觸基於股票的公司的c#.net開發者訪問,他們的應用程序必須在第二個時間內頻繁更新。所以,Interviewer告訴我,獲取鎖定或在.NET Generic集合(如List,Stack,Dictionary)上提供線程同步非常緩慢。所以,他們使用他們的自定義集合。 所以,我在想,「難道.NET集合很慢時獲取鎖和釋放鎖,即使他們是緩慢的,那麼我們如何能夠通過編寫自定義泛型類改善,業績」在多線程環境下,.NET通用集合的速度較慢

+7

這不是收集緩慢。 '鎖'是。 – MarcinJuraszek

+3

編寫自己的*自定義線程安全集合聽起來像是一個非常非常糟糕的主意。而是使用System.Collections.Concurrent中的集合。 –

+1

以線程安全的方式使用集合。如果他們因爲錯誤地使用它而貶低一個班級,這聽起來不像是一個我想與之合作的公司 - 在一次採訪中。無論「基於股票」意味着什麼...... –

回答

4

泛型和多線程與彼此無關。鑑於此,我不確定你在問什麼。

.net收藏真的很慢嗎?

...是無法回答的,因爲表現是相對的。

我們如何通過編寫自定義泛型類

提高,業績你不能因爲仿製藥什麼都沒有做與此有關。您可以通過編寫定製的應用程序特定需求的自定義集合來提高性能。這是一個不錯的主意,但它可以。例如,創建一個比內置的List<T>更快的類很容易。以List<T>作爲模板並刪除所有迭代器版本控制邏輯以刪除一些開銷。這個小勝很少值得。

如果您需要建議:嘗試使用內置集合。同步命名空間有一個System.Collections.Concurrent命名空間。

鑑於我們所掌握的信息,無法判斷面試官是否正確或錯誤地構建自定義集合。

我的問題是,爲什麼鎖是在.NET集合

慢只能使用lock與.NET,所以我不知道你是問這裏。另外:比慢什麼

有沒有什麼辦法以比鎖提供更快的方式實現與可變對象的同步?

通常,這是可能的。這是如何完成的,完全取決於具體情況。如果有一種通用的方法來做lock,但速度更快,那麼我們首先不需要lock

我試圖通過收集您詢問和解決的所有不同問題來幫助您。我想,如果你問了更少,更確切的問題,你會自己找到答案,或者認識到有些問題沒有多大意義。提出正確的問題通常會導致答案。

+1

感謝您澄清並抱歉未發佈簡潔問題,因爲我也陷入混亂。順便再次感謝你 –