Câu hỏi của bạn về việc bạn có nên gọi luôn hay không Dispose
thường là một cuộc tranh luận sôi nổi. Xem blog này để biết góc nhìn thú vị từ những cá nhân được tôn trọng trong cộng đồng .NET.
Cá nhân tôi nghĩ quan điểm của Jeffrey Richter rằng việc gọi điện Dispose
không bắt buộc là cực kỳ yếu. Ông đưa ra hai ví dụ để biện minh cho ý kiến của mình.
Trong ví dụ đầu tiên, anh ấy nói việc gọi Dispose
các điều khiển Windows Forms là tẻ nhạt và không cần thiết trong các tình huống chính thống. Tuy nhiên, ông không đề cập đến việc Dispose
thực sự được gọi tự động bởi các vùng chứa điều khiển trong các kịch bản chính đó.
Trong ví dụ thứ hai, anh ta nói rằng một nhà phát triển có thể giả định không chính xác rằng phiên bản từ IAsyncResult.WaitHandle
nên được xử lý mạnh mẽ mà không nhận ra rằng thuộc tính khởi tạo bộ xử lý chờ một cách lười biếng dẫn đến một hình phạt hiệu suất không cần thiết. Tuy nhiên, vấn đề với ví dụ này là IAsyncResult
bản thân nó không tuân thủ các nguyên tắc đã xuất bản của Microsoft để xử lý IDisposable
các đối tượng. Đó là nếu một lớp giữ một tham chiếu đến một IDisposable
kiểu thì bản thân lớp đó sẽ thực thi IDisposable
. Nếu IAsyncResult
tuân theo quy tắc đó thì Dispose
phương pháp riêng của nó có thể đưa ra quyết định về việc thành viên nào trong số các thành viên của nó cần phải xử lý.
Vì vậy, trừ khi ai đó có lập luận thuyết phục hơn, tôi sẽ ở lại trại "luôn gọi là vứt bỏ" với sự hiểu biết rằng sẽ có một số trường hợp ngoài lề phát sinh chủ yếu do các lựa chọn thiết kế kém.
using
cấu trúc.