2009-12-20 102 views
16

什麼是最有效和最要發送消息給一個線程(不處理),在而在C#中運行(1)循環最快的方法/網:最佳途徑

  1. 使用一個同步隊列(如Blocking Queues & Thread’s Communication in C#

  2. 運行消息循環在線程上下文中使用Application.Run系統winforms,並在運行application.run之前訂閱捕獲線程上下文中的消息的事件。

  3. 使用套接字或命名管道向線程發送消息。

在Linux中,我習慣使用unix域套接字來做到這一點,在Windows中做同樣的方法是什麼?共享內存文件?命名管道? 你覺得呢?

回答

15

我會親自使用生產者/消費者隊列。這正是WinForms消息循環的特點,只是以特定於Windows Forms的方式。

請注意,如果您能夠使用.NET 4.0,則框架中內置了collections,使其變得非常簡單。特別是,使用圍繞ConcurrentQueue<T>包裝的BlockingCollection<T>將做你想要的。

我不會親自使用GeeksCafe代碼 - 我封裝生產者/消費者自然到自己的類包裹隊列中,而不是通過擴展方法以這種方式處理任何隊列。特別是,您需要各方正確處理隊列,這意味着最好在我看來給它自己的API。

+0

生產者/消費者隊列類在http://www.albahari.com/threading/part2.aspx? – Eyalk 2009-12-20 13:08:34

+0

感謝Jon,生產者/消費者隊列將比命名管道傳輸消息的速度更快嗎? – Eyalk 2009-12-20 13:09:31

+0

@Eyalk:我懷疑是這樣,但是如果你特別擔心的話,可以用它作爲基準。它的好處是允許直接傳遞對象引用,而不是一個基本上會迫使你序列化/反序列化的命名管道。 – 2009-12-20 13:38:01