Xem phân tích hiệu suất đồng thời sau đại diện cho các công việc được thực hiện bởi một foreach song song:Tại sao tôi có khóa ở đây?
Bên trong vòng lặp mỗi thread đọc dữ liệu từ DB và xử lý nó. Không có khóa giữa các luồng vì mỗi luồng xử lý dữ liệu khác nhau.
Có vẻ như có các ổ khóa định kỳ trong tất cả các chủ đề của foreach vì lý do không xác định (xem hình chữ nhật dọc màu đen). Nếu bạn thấy phân đoạn bị khóa đã chọn (phần màu đỏ đậm), bạn sẽ thấy rằng ngăn xếp hiển thị chuỗi bị khóa tại hàm dựng StockModel.Quotation. Mã ở đó chỉ xây dựng hai danh sách trống!
Tôi đã đọc ở đâu đó rằng điều này có thể được gây ra bởi GC vì vậy tôi đã thay đổi thu gom rác thải để chạy trong chế độ máy chủ với:
<runtime>
<gcServer enabled="true"/>
</runtime>
tôi nhận được một cải tiến nhỏ (khoảng 10% - 15 % nhanh hơn) nhưng tôi vẫn có khóa dọc ở khắp mọi nơi.
Tôi cũng đã thêm vào tất cả các truy vấn DB WITH (NOLOCK) vì tôi chỉ đọc dữ liệu mà không có bất kỳ sự khác biệt nào.
Bất kỳ gợi ý nào về những gì đang xảy ra ở đây?
Máy tính nơi phân tích đã được thực hiện có 8 lõi.
EDIT: Sau khi bật máy chủ Microsoft Symbol, mọi chủ đề bị chặn trong các cuộc gọi như wait_gor_gc_done hoặc WaitUntilGCComplete. Tôi nghĩ rằng cho phép GCServer tôi đã có một GC cho mỗi thread vì vậy tôi sẽ tránh khóa "dọc" nhưng có vẻ như nó không phải là trường hợp. Liệu tôi có sai?
Câu hỏi thứ hai: vì máy không bị áp lực bộ nhớ (5 trong số 8 hợp đồng biểu diễn) có cách trì hoãn việc thực thi GC hoặc tạm dừng cho đến khi kết thúc song song (hoặc cấu hình để cháy ít thường xuyên hơn))?
Trong trường hợp bạn đang phân bổ rất nhiều đối tượng và khóa thực sự do GC gây ra, bạn có cố gắng buộc GC.Collect ngay trước khi bắt đầu công việc TPL không? GC.Collect với GCCollectionMode.Forced. – Alex
Vâng, bên trong vòng lặp tôi đang phân bổ một số lượng lớn các đối tượng nhỏ bị 'bỏ rơi' ở cuối mỗi lần lặp lại. Điều này có thể khóa toàn bộ các chủ đề nếu chúng được GC'ed? –
Bật Microsoft Symbol Server để nhận các dấu vết ngăn xếp tốt hơn. Do chờ đợi lâu, điều này trông giống như các bộ sưu tập rác đơn giản. –