Tôi có một máy chủ xử lý nhiều kết nối ổ cắm đến và tạo ra 2 luồng khác nhau lưu trữ dữ liệu ở định dạng XML.Khi nào nên sử dụng dây khóa trong C#?
Tôi đã sử dụng câu lệnh lock
cho an toàn chủ đề gần như trong mọi trình xử lý sự kiện được gọi là asyncronously và trong 2 chuỗi trong các phần mã khác nhau. Đáng buồn thay bằng cách sử dụng phương pháp này, ứng dụng của tôi làm chậm đáng kể.
Tôi đã cố gắng không sử dụng lock
và máy chủ rất nhanh trong việc thực thi, ngay cả khi lưu trữ tệp có vẻ tăng; nhưng chương trình bị treo vì những lý do tôi không hiểu sau 30 giây - 1 phút. công việc.
So. Tôi nghĩ rằng cách tốt nhất là sử dụng ít ổ khóa hơn hoặc chỉ sử dụng nó ở những nơi cần thiết. Vì vậy, tôi có 2 câu hỏi:
Khóa có cần thiết khi tôi viết cho các biến được truy cập công khai (C# lists) hoặc ngay cả khi tôi đọc chúng?
Khóa có cần thiết chỉ trong các chủ đề không đồng bộ được tạo bởi trình xử lý ổ cắm hoặc ở những nơi khác không?
Ai đó có thể cung cấp cho tôi một số nguyên tắc thực tiễn, về cách vận hành. Tôi sẽ không đăng toàn bộ mã lần này. Nó không có ý nghĩa để đăng khoảng 2500 dòng mã.
Không đủ cụ thể, nhìn vào đây để thông tin chung: http://www.albahari.com/threading/ – eulerfx
Có toàn bộ phạm vi của chương trình có thể - từ hoàn toàn sai/tốc độ nhanh đến luôn luôn đúng/hợp lý chậm. Bạn dường như nhấn cả hai đầu trong các thử nghiệm của mình. An toàn luồng là chủ đề không tầm thường, vì vậy tôi khuyên bạn nên đọc nó thay vì chỉ cố gắng để có được "hướng dẫn thực tế". I E. Liên kết của eulerfx là điểm khởi đầu tốt. –