2011-09-13 21 views
2

想知道如果有一個現有的環形緩衝區在.NET只有一個作家,但可以有多個使用者?不用說,有多個線程從這個緩衝區讀取(但只有一個線程寫入),所以實現必須是線程安全的。.NET中可以有多個使用者的現有環形緩衝區?

+0

請參見[.NET Framework 4中的併發集合](http://msdn.microsoft.com/zh-cn/vcsharp/gg274329)。 – Contango

+0

請參閱[MSDN博客>> C#常見問題解答]阻止收集和生產者 - 消費者問題](http://blogs.msdn.com/b/csharpfaq/archive/2010/08/12/blocking-collection-and -the-生產者 - 消費者 - problem.aspx)。 – Contango

回答

1

看看這篇文章的真的很不錯http://www.albahari.com/threading/part5.aspx我建議你想要的BlockingCollection<T>

+0

謝謝!結束使用BlockingCollection,因爲消費線程必須等待生產者線程創建新數據。嘗試使用ConcurrentQueue和帶有Yield()的輪詢系統,CPU平均上升2%至10%。 – Contango

0

每當緩存+在.NET線程你想要的Rx。見new ReplayBuffer<T>(int)http://msdn.microsoft.com/en-us/library/hh229429.aspx

最後我聽說Disruptor.NET有很多錯綜複雜的細節需要在獲得任何性能優勢之前瞭解。我建議先用Rx建模,當你有小的(< 10k)數據集在Rx中工作時,轉向Disruptor,然後關注性能。