2009-12-20 56 views
16

là gì hiệu quả nhất và cách nhanh nhất để gửi thông điệp tới một sợi (không xử lý) chạy trong khi (1) vòng lặp trong C#/net:.cách tốt nhất để gửi tin nhắn cho chủ đề

  1. Sử dụng hàng đợi được đồng bộ hóa (chẳng hạn như Blocking Queues & Thread’s Communication in C#)

  2. Chạy vòng lặp tin nhắn Sử dụng ứng dụng.Chạy các hệ thống winforms trong bối cảnh chủ đề và trước khi chạy ứng dụng.run đăng ký một sự kiện nắm bắt sự lộn xộn trong ngữ cảnh chủ đề.

  3. Sử dụng ổ cắm hoặc ống có tên để gửi chuỗi thư.

Trong Linux Tôi đang sử dụng để làm điều này với ổ cắm miền unix, cách tương đương để làm điều đó trong cửa sổ là gì? chia sẻ tập tin bộ nhớ? tên là ống? Bạn nghĩ sao?

Trả lời

15

Tôi muốn sử dụng hàng đợi của nhà sản xuất/người tiêu dùng. Đó là một cách hiệu quả vòng lặp tin nhắn WinForms là gì, chỉ trong một cách cụ thể của Windows Forms.

Lưu ý rằng nếu bạn có thể sử dụng .NET 4.0, có collections được tích hợp vào khung làm việc này rất dễ dàng. Đặc biệt, sử dụng BlockingCollection<T> quấn quanh một ConcurrentQueue<T> sẽ làm những gì bạn muốn.

tôi sẽ không cá nhân sử dụng mã GeeksCafe - Tôi muốn đóng gói theo tính chất sản xuất/tiêu dùng vào lớp riêng của mình mà kết thúc tốt đẹp một hàng đợi, chứ không phải điều trị bất kỳ hàng đợi theo cách đó thông qua phương pháp khuyến nông. Đặc biệt, bạn cần tất cả các bên để xử lý hàng đợi một cách chính xác, điều đó có nghĩa là tốt hơn là cung cấp cho nó API riêng của mình trong chế độ xem của tôi.

+0

lớp sản xuất/xếp hàng tiêu dùng như trong http://www.albahari.com/threading/part2.aspx? – Eyalk

+0

Cảm ơn Jon, hàng đợi của nhà sản xuất/người tiêu dùng có nhanh hơn đường ống được đặt tên để chuyển tin nhắn không? – Eyalk

+0

@Eyalk: Tôi nghi ngờ như vậy - nhưng điểm chuẩn nếu bạn đặc biệt quan tâm. Nó có lợi thế là cho phép các tham chiếu đối tượng được truyền trực tiếp, chứ không phải là một đường ống được đặt tên mà về cơ bản sẽ buộc bạn phải tuần tự hóa/deserialize. –

Các vấn đề liên quan