Tôi đang viết một ứng dụng .NET quan trọng về hiệu suất, sử dụng nhiều luồng đa luồng.Lập hồ sơ/tối ưu hóa ứng dụng đa luồng nhiều ứng dụng
Sử dụng Visual hiệu suất Studio hồ sơ, các bộ phận chức năng với mẫu độc quyền là:
WaitHandle.WaitAny()
- 14,23%
@[email protected]
-7,76%
Monitor.Enter
-5,09%
Về cơ bản, tôi 3 chức năng hàng đầu đang làm việc với các luồng nguyên thủy và ngoài tầm kiểm soát của tôi ở một mức độ nào đó mà tôi tin. Công việc/quy trình xử lý của tôi khá nhỏ so với tôi và tôi đang cố gắng tăng hiệu suất. Tôi tin rằng các thuật toán liên quan là khá âm thanh, mặc dù tôi đang xem xét chúng khá thường xuyên.
Câu hỏi của tôi là:
- Nếu có 14,23% số mẫu CPU trong những phương pháp - là CPU có hiệu quả 'nhàn rỗi' đối với hầu hết những người mẫu, nghĩa là chỉ chờ đợi vào chủ đề khác? Hoặc là phần nhàn rỗi của chuỗi chờ đợi không được hiển thị như một phần của dấu vết hồ sơ [và 27,08% được hiển thị trong 3 tổng của tất cả chi phí này trong các phương thức đồng bộ đó]? (Tôi có thể đoán rằng điều này chủ yếu là nhàn rỗi, nhưng sẽ đánh giá cao một số tài liệu tham khảo phong nha đằng sau câu trả lời cho điều này xin vui lòng)
- Tôi đã xem xét các sơ đồ khóa của mình, tuy nhiên những kết quả này cho thấy một số nút cổ chai cụ thể hoặc kỹ thuật tôi nên xem xét thêm tối ưu hóa?
- Có phải là
WaitAny
khá kém đặc biệt không? Tôi sử dụng nó rất nhiều để kiểm tra xem các đối tượng hàng đợi cụ thể có thể đọc được/ghi được hay không, nhưng cũng kiểm tra cờ hủy bỏ cùng một lúc. Có cách nào tốt hơn để làm điều đó không?
Nó có thể là cách bạn _use_ những nguyên thủy đó. –
@Henk - thực sự, tôi đã cố gắng ám chỉ điều đó bằng cách nói trong việc xem lại các thuật toán của tôi, khóa sơ đồ –
@KierenJohnstone Nếu bạn có VS 2010, có lẽ tốt hơn nên sử dụng Concurrency Profiler/Visualizer cho việc này. –