Câu trả lời ngắn
Hồ bơi hoặc trang web ứng dụng của bạn sắp bị tắt quá sớm. Mở rộng thời gian chờ nhàn rỗi trên trang web, kéo dài tuổi thọ của ứng dụng cho hồ bơi chạy trang web. Tăng cấp phát bộ nhớ và yêu cầu giới hạn.
Full câu trả lời
Nếu bạn muốn biết khi nào và tại sao một cái gì đó đã được loại bỏ khỏi bộ nhớ cache, bạn cần phải đăng nhập việc loại bỏ mục bằng cách sử dụng CacheItemRemovedCallback tùy chọn trên chèn ... Sau đó, bạn có thể đăng nhập lý do sử dụng đối số CacheItemRemovedReason.Do đó bạn có thể đăng nhập lý do là một trong bốn lý do được liệt kê:
- Removed Các mục được lấy ra từ bộ nhớ cache bởi một cuộc gọi Remove phương pháp hoặc bằng một lời gọi phương thức Insert rằng quy định chìa khóa tương tự.
- Hết hạn Mục này bị xóa khỏi bộ nhớ cache vì đã hết hạn.
- Đã sử dụng Mục này bị xóa khỏi bộ nhớ cache vì hệ thống đã xóa mục đó để giải phóng bộ nhớ.
- DependencyChanged Mục này bị xóa khỏi bộ nhớ cache vì phụ thuộc bộ nhớ cache được liên kết với nó đã thay đổi.
Thông thường, bạn sẽ thấy Hết hạn và Bị lạm dụng là lý do cho những điều không có giải thích Xóa cuộc gọi được thực hiện đối với bộ nhớ cache và không có phụ thuộc.
Bạn có thể sẽ tìm hiểu, trong khi truy tìm thông qua nội dung thú vị này, rằng các mục của bạn không bị hết hạn hoặc không được sử dụng. Thay vào đó, tôi nghi ngờ bạn sẽ thấy rằng AppDomain đang được dỡ xuống.
Một cách có thể xảy ra do tệp web.config (hoặc thư mục bin hoặc .aspx, v.v.) bị thay đổi. Để biết thêm thông tin về thời điểm điều này xảy ra, hãy xem phần Khởi động lại ứng dụng của this page. Khi điều đó xảy ra, các yêu cầu hiện đang chờ xử lý sẽ bị cạn kiệt, bộ nhớ cache đã làm trống và AppDomain sẽ được tải xuống. Bạn có thể phát hiện tình huống này bằng cách kiểm tra AppDomain.IsFinalizingForUnload và ghi nhật ký trong khi gọi lại.
Một lý do khác cho AppDomain để tái chế là khi IIS quyết định tái chế AppPool vì bất kỳ lý do nào mà nó đã được cấu hình. Ví dụ về được xxx bộ nhớ đã được phân bổ qua các đời, yyy giây của thời gian chạy cho AppPool, ttt theo lịch trình thời gian tái chế, hoặc iiii thời gian nhàn rỗi (không yêu cầu gửi đến). Để biết thêm chi tiết, hãy kiểm tra this article for IIS6 hoặc this article for IIS7
Làm cách nào để xác minh rằng nó đã bị xóa? –
@ J.W. : Cache [CacheName] sẽ là null nếu mục nhập đã bị xóa/hết hạn. – RickNZ