2009-11-26 26 views
13

Chúng tôi có ứng dụng Windows Forms sử dụng điều khiển ActiveX (bên thứ ba) và chú ý trong các đối tượng hiệu suất .NET trong "Bộ nhớ .NET CLR" mà số "Sync Blocks" đang được sử dụng liên tục tăng (cùng với việc tăng mức sử dụng bộ nhớ), mặc dù ứng dụng của chúng tôi đang ở chế độ chờ."Khối đồng bộ hóa" là gì và các mẹo để giảm số lượng

Việc xây dựng trong lời giải thích cho các bang đếm khối chìm:

truy cập này sẽ hiển thị số lượng hiện tại của khối đồng bộ trong sử dụng. Khối đồng bộ là cấu trúc dữ liệu cho mỗi đối tượng được phân bổ để lưu trữ thông tin đồng bộ hóa. Các khối đồng bộ giữ các tham chiếu yếu đến các đối tượng được quản lý và cần được quét bởi Bộ thu gom rác. Các khối đồng bộ không bị hạn chế trong việc lưu trữ thông tin đồng bộ hóa và cũng có thể lưu trữ siêu dữ liệu interop COM. Bộ đếm này được thiết kế để chỉ ra các vấn đề về hiệu năng với việc sử dụng đồng bộ các nguyên thủy đồng bộ.

Số đếm đồng bộ dường như được đặt lại khi chúng tôi chuyển sang ứng dụng khác. Chính xác điều gì khiến chúng được tạo ra, và có bất kỳ lời khuyên nào để giảm số lượng những thứ này không?

(BTW, nó thực sự được đánh vần là "khối chìm" trong danh sách các bộ đếm hiệu suất. Tôi không chắc chắn nếu một lỗi đánh máy hoặc một trò đùa ống nước)

+0

Tốt hơn gọi chúng là khối đồng bộ hóa, chắc chắn trong tiêu đề. –

Trả lời

19

Mỗi lần bạn sử dụng một khóa nguyên thủy như lock hoặc Monitor.Enter trong nền tảng .NET, cấu trúc khối đồng bộ được khởi tạo đối với đối tượng đối tượng bị khóa. Như đã nêu trong định nghĩa, các khối này có thể chứa nhiều thông tin hơn như mã băm của đối tượng và thông tin interop COM.

Vì các khối này bị giới hạn trong những gì có thể được lưu trữ, việc truy cập vào các khối đồng thời gây tranh chấp, làm cho nội dung của đối tượng tiêu đề trở thành chỉ mục thành bảng đồng bộ toàn hệ thống do CLR quản lý. CLR có thể tái chế các khối đồng bộ này và khi đối tượng cần chúng.

Khóa trên một đối tượng luôn luôn phải quay vòng CPU trước khi chờ trên đối tượng hạt nhân hệ thống. Bất cứ khi nào xoay vòng CPU được phân bổ không được satisified để cho phép một màn hình có được khóa phần quan trọng, một xử lý sự kiện tự động khôi phục hệ thống sẽ được tạo và tham chiếu đến nó sẽ được đặt trong khối đồng bộ liên kết. Các chủ đề khác chờ xử lý sự kiện này sau đó sẽ chặn trên xử lý sự kiện cho đến khi chuỗi sở hữu đã kích hoạt bản phát hành của xử lý sự kiện. Do đó, nếu bộ đếm này liên tục tăng, đó là dấu hiệu cho thấy quá nhiều chủ đề đang tranh chấp cho một khóa trên một hoặc nhiều đối tượng và các khóa này có thể sẽ không bao giờ được giải phóng. Quay lại đầu trang |

+0

Cũng có thể có liên quan đề cập đến việc gọi GetHashCode() cũng khởi tạo khối đồng bộ. –

+0

@VincePanuccio Tôi tin rằng đó là một điều .NET 1.1? (Tức là CLR làm điều đó ngày hôm nay?) – user2864740

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