在我的服務器應用程序(用C#編寫)中,我需要創建一個具有相同類型對象的池。當我需要時,我從池中取出一個對象,當它不再需要時,它會回到池中。機制需要是線程安全的,因爲不同的線程會詢問和提交這些對象。我知道,經常鎖定某些東西以使線程安全對應用程序性能有不利影響。你能提出一個我甚至可以避免顯式鎖定的設計嗎?如何創建一個線程安全的對象池?
請你能建議我可以在上面完成的方式嗎?可以調整池的大小(如果缺少對象,則可以創建附加值)是一個很好的附加組件。
在此先感謝...
在我的服務器應用程序(用C#編寫)中,我需要創建一個具有相同類型對象的池。當我需要時,我從池中取出一個對象,當它不再需要時,它會回到池中。機制需要是線程安全的,因爲不同的線程會詢問和提交這些對象。我知道,經常鎖定某些東西以使線程安全對應用程序性能有不利影響。你能提出一個我甚至可以避免顯式鎖定的設計嗎?如何創建一個線程安全的對象池?
請你能建議我可以在上面完成的方式嗎?可以調整池的大小(如果缺少對象,則可以創建附加值)是一個很好的附加組件。
在此先感謝...
+1看起來有趣!讓我看看... – Hemant 2009-11-18 13:46:19
我有好運氣this one CodeProject上。我只需稍作調整以便如何存儲WeakReference
,但除此之外,它在生產中運行並沒有任何問題。
不要試圖避免顯式鎖定,除非您有證據表明鎖定是不可接受的性能的頭號原因。絕大多數時候鎖的速度非常快,如果你的鎖速度很慢,那麼機率是很好的,你的應用程序中有很深的設計問題。請記住,在爭用情況下,鎖只是緩慢的*,如果您有很多爭議,*您可能做錯了事。* – 2009-11-18 15:14:32