Trong ASP.NET nếu các mục còn lại trong trạng thái phiên thực hiện IDisposable nhưng không bao giờ được gỡ bỏ và xử lý bởi ứng dụng khi hết hạn sẽ hủy bỏ được gọi trên các đối tượng mà bất kỳ mã nào trong Dipose () sẽ thực thi?Phiên chứa các mục thực hiện IDisposable
Trả lời
Nếu mẫu IDisposable
là implemented properly, thì có (nghĩa là destructor của lớp sẽ xử lý việc vứt bỏ đối tượng). Tôi không tin người quản lý phiên ASP.NET thực hiện bất kỳ sự bảo đảm nào về việc gọi một cách rõ ràng Dispose()
trên các lớp thực hiện IDisposable
.
Lưu ý rằng mặc dù phản đối tích cực của Mark, tôi không đề xuất "thường xuyên" thêm trình kết thúc. Tôi chỉ đơn giản gợi ý rằng nếu bạn muốn phương thức Dispose
trên đối tượng của bạn được gọi khi phiên hết hạn, đây là tùy chọn khả thi.
Trình kết thúc là * không * triển khai IDisposable chính xác; thay vào đó, một cái gì đó với một finalizer thường có thể được IDisposable. Nhưng một đối tượng IDisposable không nên có một finalizer chỉ vì nó là IDisposable. –
Tôi không nghĩ rằng đó là "hung hăng" - đơn giản là một finalizer không có gì để làm với liệu IDisposable được "thực hiện đúng" –
Tôi muốn để lại một bình luận tiêu cực về câu trả lời của tôi, xuyên tạc câu trả lời của tôi, và tạo câu trả lời của riêng bạn nhắc lại sự không đồng ý của bạn đủ tiêu chuẩn là 'phản đối tích cực'. Bất kỳ một trong số đó sẽ là đủ trong và của chính họ. Tôi đoán chúng ta cũng sẽ không đồng ý với điều này nữa. –
Tôi không đồng ý với câu trả lời của Sean; trước hết, finalizers nên không thường xuyên được thêm vào các lớp, ngay cả khi chúng là IDisposable
- finalizers chỉ nên thực sự được sử dụng trong các lớp đại diện cho tài nguyên không được quản lý. Ngược lại, một lớp học với một finalizer thường là IDisposable
.
Câu hỏi: là Dispose()
được gọi - không, không phải vậy. Các đối tượng sẽ được thu gom rác tại một số điểm trong tương lai (không xác định), nhưng đó là về nó. Một finalizer sẽ không thêm nhiều ở đây, vì bất kỳ đối tượng đóng gói nào cũng sẽ đủ điều kiện để thu thập (giả sử rằng chúng không được tham chiếu ở nơi khác).
Tôi muốn được quan tâm để có các đối tượng Dùng một lần trong Phiên. Nó gần như chắc chắn sẽ tạo ra một vấn đề khả năng mở rộng cho bạn. Bất kỳ thứ gì dùng một lần có thể được kết nối với một số tài nguyên hạn chế, nếu bạn có nhiều phiên hoạt động, bạn có khả năng sử dụng tài nguyên đó. Thứ hai, tôi hy vọng rằng nhiều đối tượng dùng một lần sẽ không hoạt động tốt trong một trang trại vì tài nguyên mà chúng được gắn với có thể là cục bộ cho một máy duy nhất và chúng sẽ không tuần tự hóa và sau đó deserialize trên một máy khác trong cùng một tiểu bang.
- 1. thực hiện IDisposable đúng cho mã này
- 2. Thực hiện IDisposable trên lớp kín
- 3. Triển khai IDisposable cho lớp chứa chủ đề
- 4. Liệu System.Runtime.Caching.MemoryCache có vứt bỏ các mục IDisposable khi bị đuổi không?
- 5. vaadin 7: Widgetset không chứa thực hiện
- 6. Thực hiện các phiên trong máy chủ web java?
- 7. Làm cách nào để thực hiện các số phiên bản?
- 8. Phát hiện "bị rò rỉ" đối tượng IDisposable
- 9. IDisposable, ObjectDisposedException, và các loại an toàn
- 10. Làm thế nào là IDisposable được thực hiện trên FileStream trong .Net 1.1
- 11. Chuỗi IDisposable
- 12. Tại sao danh sách thư mục chứa thư mục (.) Và thư mục mẹ (..) hiện tại?
- 13. Bộ sưu tập tiêu chuẩn cho các đối tượng IDisposable
- 14. C# IDisposable Sử dụng: Thực hành tốt nhất
- 15. cách thực hiện đăng nhập php hoặc phiên xác thực
- 16. Autofac và IDisposable interface
- 17. Thực hiện đệ quy trong các thư mục con
- 18. IDisposable Câu hỏi
- 19. "Mục tiêu hiện đại-C" thực sự là phiên bản mới, tức là Mục tiêu-C 2.1?
- 20. Xóa các thư mục và chứa các tập tin
- 21. Nên một đối tượng thực hiện một iterator hoặc chứa một đối tượng thực hiện một iterator
- 22. mục đích ValidationContext khi thực hiện IValidatableObject
- 23. Không thực hiện mục tiêu org.apache.maven.plugins
- 24. IDisposable là gì?
- 25. Xác thực API PHP và các phiên
- 26. IDisposable trên một kho tiêm
- 27. groovy thực hiện với các tham số có chứa không gian
- 28. Spring @Autowired confused (vùng chứa hoặc phiên)
- 29. thực hiện kiểm soát phiên bản cho phát triển web
- 30. Tải phiên bản tập tin và phiên bản lắp ráp của các tệp DLL trong thư mục hiện tại và tất cả các thư mục con
Câu trả lời khác cho câu hỏi này: http://stackoverflow.com/q/12347044/11683 – GSerg