2014-06-19 18 views
19

Các tài liệu MSDN cho ManualResetEventSlim bangManualResetEventSlim khuyến cáo thời gian chờ đợi

Bạn có thể sử dụng lớp này cho hiệu suất tốt hơn so với ManualResetEvent khi thời gian chờ đợi được dự kiến ​​sẽ rất ngắn.

Thời lượng "rất ngắn" là bao lâu? Tại thời điểm nào thì lợi ích của việc sử dụng một đối tượng hạt nhân với một số tiền lớn hơn của việc tạo ra một đối tượng hạt nhân là ManualResetEvent?

+0

Đối với tôi, "rất ngắn" là khá vô nghĩa. Quy tắc của tôi là nếu tôi mong đợi sự kiện được đặt hầu hết thời gian (nghĩa là tôi không chờ đợi), thì tôi sẽ sử dụng 'ManualResetEventSlim'. Nếu không, tôi sẽ sử dụng 'ManualResetEvent'. Nếu bạn đang viết một ứng dụng nhạy cảm với hiệu suất, bạn nên kiểm tra mã của mình với cả hai để xác định xem có sự khác biệt nào không. Nếu bạn không tính micro giây, thì có lẽ sẽ lãng phí thời gian để lo lắng về cái nào nhanh hơn. –

+2

"Rất ngắn" trong ngữ cảnh này có nghĩa là hàng chục đến hàng trăm micro giây. Phiên bản mỏng quay-chờ đợi với kỳ vọng rằng các chủ đề khác sẽ phát hành khóa trong thời gian ít hơn một vài thiết bị chuyển mạch bối cảnh sẽ mất. – doug65536

Trả lời

10

Đây là những gì tôi thấy và rất thích cho người khác để xác nhận điều này, nhưng đây là những gì tôi thấy trong khi đọc Reference Source for ManualResetEventSlim

ManualResetEventSlim
Nó đang cố gắng chỉ ngủ và năng suất dựa trên số bộ vi xử lý và ngủ cực kỳ ngắn - 1ms hoặc 0ms tùy thuộc vào chỉ số spin hiện tại của nó. Nếu nó vẫn chưa đủ thời gian, sau đó nó sẽ trở lại sử dụng Monitor.Wait sử dụng một phiên bản cập nhật mới của thời gian chờ mà ban đầu được thông qua vào

. Đi qua trong 0 cho Thread.Sleep làm giảm lát thời gian của nó.

ManualResetEvent
Nó sử dụng WaitHandle và gọi các phương thức bản địa để xử lý chờ đợi thời gian quy định. Thật không may, tôi không thể nhìn thấy những gì nó đang làm.

Kết luận của tôi
"Rất Ngắn" có nghĩa là chỉ là một vài mili giây.

EDIT: Tôi chỉ tìm thấy những có rất nhiều thông tin:

0

Tỷ lệ từ bộ đệm CPU đến RAM và Kernel xấp xỉ logarit. Giả sử bạn có thể thực hiện 400 chu trình sử dụng bộ nhớ cache CPU hoặc 20 chu kỳ CPU bằng cách sử dụng bộ nhớ đọc/ghi RAM hoặc 1 hoạt động hạt nhân. Những con số sẽ phụ thuộc vào phần cứng, nó chỉ là một ước tính.

Nếu bạn nghĩ rằng thời gian chờ tối đa sẽ nhỏ hơn 6-15 ns (~ 20-50 chu kỳ CPU @ 3GHz) hơn là thời gian chờ đợi nhỏ.

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