Tôi mới phát hiện ra rằng mọi yêu cầu trong ứng dụng web ASP.Net đều có Khóa phiên khi bắt đầu yêu cầu và sau đó phát hành vào cuối yêu cầu!
Trong trường hợp ý nghĩa của việc này bị mất đối với bạn, vì nó là cho tôi lúc đầu, điều này về cơ bản có nghĩa như sau:
Bất cứ khi nào một trang web ASP.Net mất nhiều thời gian để tải (có thể do cuộc gọi cơ sở dữ liệu chậm hoặc bất cứ điều gì) và người dùng quyết định họ muốn điều hướng đến một trang khác vì họ mệt mỏi vì phải chờ đợi, HỌ KHÔNG THỂ! Khóa phiên ASP.Net buộc yêu cầu trang mới phải đợi cho đến khi yêu cầu ban đầu kết thúc tải chậm một cách đau đớn. Arrrgh.
Bất cứ khi nào UpdatePanel tải chậm và người dùng quyết định điều hướng đến một trang khác trước khi UpdatePanel cập nhật xong ... HỌ KHÔNG THỂ! Khóa phiên ASP.net buộc yêu cầu trang mới phải đợi cho đến khi yêu cầu ban đầu kết thúc tải chậm một cách đau đớn. Đôi Arrrgh!
Vậy những lựa chọn là gì? Cho đến nay tôi đã nghĩ ra:
- Triển khai một sessionStateDataStore tùy chỉnh, mà ASP.Net hỗ trợ. Tôi đã không tìm thấy quá nhiều thứ để sao chép, và nó có vẻ như có nguy cơ cao và dễ gây rối.
- Theo dõi tất cả các yêu cầu đang diễn ra và nếu một yêu cầu đến từ cùng một người dùng, hãy hủy yêu cầu ban đầu. Có vẻ như cực đoan, nhưng nó sẽ làm việc (tôi nghĩ).
- Đừng sử dụng Phiên! Khi tôi cần một số trạng thái cho người dùng, tôi chỉ có thể sử dụng Cache và các mục chính trên tên người dùng được xác thực hoặc một số thứ như vậy. Một lần nữa có vẻ như cực đoan.
Tôi thực sự không thể tin rằng nhóm Microsoft của ASP.Net sẽ để lại một nút cổ chai hiệu năng lớn như vậy trong khuôn khổ ở phiên bản 4.0! Tôi có thiếu một cái gì đó rõ ràng? Việc sử dụng bộ sưu tập ThreadSafe cho Phiên sẽ khó đến mức nào?