Tay cầm được ghim không đồng bộ có liên quan chặt chẽ với I/O chồng lên nhau trong Windows. Hỗ trợ đọc và viết không đồng bộ với ReadFile và WriteFile, sử dụng đối số OVERLAPPED. Trình điều khiển thiết bị lưu trữ con trỏ đệm đã truyền và trực tiếp đọc/ghi từ/đến bộ đệm, hoàn toàn không đồng bộ từ hoạt động của chương trình. Các phương thức wrapper được quản lý là BeginRead và BeginWrite.
Nếu bộ đệm được phân bổ trong vùng đệm GC thì nó cần được ghim cho đến khi trình điều khiển kết thúc bằng bộ đệm. Có GC di chuyển bộ đệm trong khi trình điều khiển đang hoạt động trên chuyển I/O là tai hại, ghi sẽ tạo ra rác và đọc sẽ hỏng heap GC, ghim là cần thiết để ngăn không cho bộ đệm bị di chuyển trong khi trình điều khiển đang sử dụng nó .
Đối tượng được ghim là khá khó chịu, chúng cung cấp cho người thu gom rác một thời gian khó khăn để làm việc xung quanh tảng đá trên đường khi nó nén đống. Một điều ác cần thiết ở đây, cách duy nhất có thể để đi trước là để lại bộ đệm được ghim trong một khoảng thời gian ngắn nhất có thể.
Tay cầm được ghim không đồng bộ được đánh dấu đặc biệt để cho phép CLR tự động bỏ ghim bộ đệm khi hoàn thành I/O. Nhanh nhất có thể, khi cổng hoàn thành I/O báo hiệu hoàn thành và do đó không phải đợi mã máy khách thực hiện cuộc gọi lại và bỏ ghim bộ đệm. Mà có thể mất một lúc khi có rất nhiều chủ đề threadpool trong chuyến bay. Đó là một tối ưu hóa vi mô có xu hướng biến thành một macro khi bạn có, một máy chủ web xử lý hàng chục nghìn yêu cầu của máy khách.
Nó chỉ được sử dụng cho các đối tượng kiểu System.Threading.OverlappedData, một lớp nội bộ trong mscorlib.dll mà CLR có kiến thức đặc biệt và là bản fax được quản lý cho cấu trúc OVERLAPPED gốc mà các hàm api của Windows sử dụng.
Ngắn câu chuyện ngắn, tất cả những gì bạn thực sự biết là có một I/O chồng lên nhau đang chờ xử lý nếu bạn thấy số lượng xử lý là 1 khi nó bị lỗi. Có bất kỳ mã nguồn gốc nào chồng chéo I/O với các bộ đệm được cấp phát gc không được ghim nếu không thực sự là một cách tốt để phá hủy heap. Bạn có khá nhiều chốt xử lý btw.
Nguồn
2011-09-26 13:17:58
"Nhưng bạn nói đúng, tôi sẽ điều tra nơi tất cả các chốt được ghim đến từ đó, con số này khá cao .." bạn có thấy điều gì thú vị không? – stej