Tôi đang sử dụng Thư viện Doanh nghiệp 4 trên một trong các dự án của tôi để ghi nhật ký (và các mục đích khác). Tôi đã nhận thấy rằng có một số chi phí cho việc ghi nhật ký mà tôi đang làm mà tôi có thể giảm thiểu bằng cách ghi nhật ký trên một chuỗi riêng biệt.Cách đăng nhập có hiệu quả không đồng bộ?
Cách tôi đang làm điều này bây giờ là tôi tạo ra một đối tượng LogEntry và sau đó tôi gọi BeginInvoke trên một đại biểu gọi Logger.Write.
new Action<LogEntry>(Logger.Write).BeginInvoke(le, null, null);
Điều tôi thực sự muốn làm là thêm thông điệp tường trình vào hàng đợi và sau đó có một chuỗi kéo các đối tượng LogEntry ra khỏi hàng đợi và thực hiện thao tác nhật ký. Lợi ích của việc này là việc ghi nhật ký không can thiệp vào hoạt động thực thi và không phải mọi thao tác ghi nhật ký đều dẫn đến công việc bị ném vào nhóm luồng.
Làm cách nào để tạo hàng đợi được chia sẻ hỗ trợ nhiều người viết và một người đọc theo cách an toàn? Một số ví dụ về việc thực hiện hàng đợi được thiết kế để hỗ trợ nhiều người viết (không gây ra đồng bộ/chặn) và một người đọc duy nhất sẽ được đánh giá cao.
Đề xuất về phương pháp tiếp cận thay thế cũng sẽ được đánh giá cao, tôi không quan tâm đến việc thay đổi khung đăng nhập.
@spoon, tôi đã thêm một phiên bản được cải thiện một chút, hãy nhớ rằng bạn sẽ phải thử nghiệm nó rất nhiều trước khi sử dụng nó, vì tôi chỉ cần gõ nó lên. –
Mặc dù không áp dụng trực tiếp cho câu hỏi này (vì nó đang nói EntLib 4), Thư viện doanh nghiệp 6 hiện hỗ trợ Ghi nhật ký không đồng bộ ra khỏi hộp. –